【问题标题】:Find JSON object in JSON array在 JSON 数组中查找 JSON 对象
【发布时间】:2019-06-07 12:51:16
【问题描述】:

我的目标是验证我从 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 对象

【问题讨论】:

  • 遍历数组并检查当前对象(在数组中)是否等于从 RabbitMQ 获得的对象
  • @Lino 如果我知道怎么做,我会这样做,不会问
  • 我可以引导您到documentation,因为我不会为您编写代码,尤其是getJSONObject()length() 方法应该可以帮助您实施我在其他评论中的建议跨度>
  • 哪一行提示错误?你用的是什么 JSON 库?

标签: java arrays json


【解决方案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

【讨论】:

  • 谢谢!这是最有帮助的。但我不得不使用 .size() 而不是 length()。我比较了 JSONObjects,所以我必须从一个数组中获取一个对象: JSONObject object = array.getJSONObject(n);并使用这个 JSONAssert.assertEquals("TEST FAILED", message, object.toJSONString(), JSONCompareMode.LENIENT);是的,我知道我可以创建一个字符串并将 JsonArray 项转换为字符串
【解决方案2】:

我可以建议您使用 Gson 库吗? 你可以使用这样的东西。但如果 json 不匹配/不包含字段,它会抛出异常。

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

希望对你有帮助

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2014-05-13
      • 1970-01-01
      • 2020-07-22
      • 2022-08-03
      • 2017-09-05
      • 2019-04-08
      • 2015-02-12
      • 1970-01-01
      • 2019-08-11
      相关资源
      最近更新 更多