在JSON数组中查找JSON对象

时间:2019-06-07 12:51:16

标签: java arrays json

我的目标是验证从RabbitMQ获得的某些JSON是否与单个文件中数组中的预期JSON之一相对应。

换句话说,我需要验证此JSON:

{
  "networkCode":"network",
  "programId":"92000"
}

存在于此JSON数组中:

[
{
   "networkCode":"network",
   "programId":"92000"
},
{
   "networkCode":"network",
   "programId":"92666"
}
]

非常感谢您的帮助!

我的代码的某些部分

//GET DESIRABLE JSON
String message = new String(delivery.getBody(), StandardCharsets.UTF_8);
            JSONObject myJSON= new JSONObject(message);

//GET THE JSON ARRAYS FROM FILE
            JSONParser parser = new JSONParser();
            Object expectedJSONs= parser.parse(new FileReader("C:\\amqpclient\\src\\test\\java\\tradeDoubler\\ExpectedDTO.json"));
            JSONArray expectedArray = (JSONArray) expectedJSONs;

            JSONAssert.assertEquals(
                    myJSON, expectedArray , JSONCompareMode.LENIENT);

编译说不能解决这个问题

线程“ main”中的异常java.lang.AssertionError:期望使用JSON数组,但传入JSON对象

3 个答案:

答案 0 :(得分:1)

我可以建议您使用Gson库吗? 您可以使用类似这样的东西。但是,如果json不匹配/包含字段,它将引发异常。

Type listType = new TypeToken<ArrayList<YourJavaClassJsonModel>>() {
        }.getType();
        List<YourJavaClassJsonModel> resultList = gson.fromJson(JsonString, listType);

希望这会有所帮助

答案 1 :(得分:1)

Org.json库非常易于使用。

下面的示例代码:

import org.json.*;

JSONObject obj = new JSONObject(" yourJSONObjectHere ");

JSONArray arr = obj.getJSONArray("networkArray");
for (int i = 0; i < arr.length(); i++)
{
    String networkCode = arr.getJSONObject(i).getString("networkCode");
    ......
}

通过迭代JSONArray,您可以检查每个对象是否等于您的搜索。

您可能会从以下地方找到更多示例:Parse JSON in Java

答案 2 :(得分:0)

您可以使用JSON解析器将JSON转换为Java对象(JacksonGSON是不错的选择),然后检查该对象。