【问题标题】:How to get nested JSON data within an array using Java?如何使用 Java 在数组中获取嵌套的 JSON 数据?
【发布时间】:2021-06-18 01:36:03
【问题描述】:

我正在尝试从以下 JSON 中获取并打印每家餐厅的 NameStarRating 的值,我已对其进行了 sn-p(在此之上还有更多,但这是相关的位我正在尝试提取。完整链接可在此处获得API):

Restaurants": [
{
  "Id": 89024,
  "Name": "Regina Pizza",
  "UniqueName": "regina-pizza-new-croydon",
  "Address": {
    "City": "Croydon",
    "FirstLine": "309 Lower Addiscombe Road",
    "Postcode": "CR0 6RF",
    "Latitude": 51.382231,
    "Longitude": -0.069915
  },
  "City": "Croydon",
  "Postcode": "CR0 6RF",
  "Latitude": 0.0,
  "Longitude": 0.0,
  "Rating": {
    "Count": 561,
    "Average": 5.18,
    "StarRating": 5.18
  }

我有以下方法获取数据:

public static String parse(String responseBody) {
    JSONArray restaurants = new JSONArray(responseBody);
    for (int i = 0; i < restaurants.length(); i++) {
        JSONObject restaurant = restaurants.getJSONObject(i);
        String name = restaurant.getString("Name");
        int rating = restaurant.getInt("StarRating");
        System.out.println("Restaurant: " + name + " Rating: " + rating);
    }
    return null;
}
  1. 运行代码时,我收到一条错误消息,指出 JSONArray 必须以 '[' 开头。

  2. 我试图找到类似的嵌套 JSON 示例,但找不到相关示例。

【问题讨论】:

    标签: java arrays json


    【解决方案1】:

    Undercore-java 会有所帮助。

        String json = "{\"Restaurants\": [\n" +
                "{\n" +
                "  \"Id\": 89024,\n" +
                "  \"Name\": \"Regina Pizza\",\n" +
                "  \"UniqueName\": \"regina-pizza-new-croydon\",\n" +
                "  \"Address\": {\n" +
                "    \"City\": \"Croydon\",\n" +
                "    \"FirstLine\": \"309 Lower Addiscombe Road\",\n" +
                "    \"Postcode\": \"CR0 6RF\",\n" +
                "    \"Latitude\": 51.382231,\n" +
                "    \"Longitude\": -0.069915\n" +
                "  },\n" +
                "  \"City\": \"Croydon\",\n" +
                "  \"Postcode\": \"CR0 6RF\",\n" +
                "  \"Latitude\": 0.0,\n" +
                "  \"Longitude\": 0.0,\n" +
                "  \"Rating\": {\n" +
                "    \"Count\": 561,\n" +
                "    \"Average\": 5.18,\n" +
                "    \"StarRating\": 5.18\n" +
                "  }" +
                "}]}";
        U.<List<Map<String, Object>>>get(U.fromJsonMap(json), "Restaurants").forEach(
                restaurant -> System.out.println(restaurant.get("Name") + " "
                    + U.get(restaurant, "Rating.StarRating"))
        );
    
    // output
    // Regina Pizza 5.18
    

    【讨论】:

    • 您能否为此添加更多上下文?我正在苦苦挣扎,谢谢。
    • 我建议使用替代库从 Json 中提取数据。
    【解决方案2】:

    考虑使用Java的JsonPath

    然后做一些类似的事情(可能需要一些调整)

    Restaurants[name][StarRating]
    

    【讨论】:

      猜你喜欢
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-15
      相关资源
      最近更新 更多