【问题标题】:How do I get parameters from json如何从json中获取参数
【发布时间】:2018-01-13 17:51:26
【问题描述】:

来自这个 json 代码

{
    "city": {
        "id": 1851632,
        "name": "Shuzenji",
        "coord": {
            "lon": 138.933334,
            "lat": 34.966671
        },
        "country": "JP",
        "cod": "200",
        "message": 0.0045,
        "cnt": 38,
        "list": [{
                "dt": 1406106000,
                "main": {
                    "temp": 298.77,
                    "temp_min": 298.77,
                    "temp_max": 298.774,
                    "pressure": 1005.93,
                    "sea_level": 1018.18,
                    "grnd_level": 1005.93,
                    "humidity": 87,
                    "temp_kf": 0.26
                },
                "weather": [{
                        "id": 804,
                        "main": "Clouds",
                        "description": "overcast clouds",
                        "icon": "04d"
                    }
                ],
                "clouds": {
                    "all": 88
                },
                "wind": {
                    "speed": 5.71,
                    "deg": 229.501
                },
                "sys": {
                    "pod": "d"
                },
                "dt_txt": "2014-07-23 09:00:00"
            }
        ]
    }

如何获取天气数组中的 list.main.temp 和 list.weather.main?

我获取 list.main.temp 的代码如下,但它不起作用:

JSONArray array = obj.getJSONArray("list");
 String temp = String.valueOf((Double) array.getJSONObject(i).getJSONObject("main").get("temp"));

谁能帮我修复代码并帮我获取list.weather.main?

【问题讨论】:

  • “但它不起作用”是什么意思?您是否收到任何错误、异常或不正确的结果?
  • 我的意思是它没有返回正确的数字
  • 你得到的是什么数字/价值?
  • 可能重复:How to parse JSON

标签: java json openweathermap


【解决方案1】:

您不能跳到 JSON 对象的中间。

城市元素包含列表

obj.getJSONObject("city").getJSONArray("list");

你还需要一个循环

array.getJSONObject(i)

您可能希望查看Json-path 以更轻松地查询数据

【讨论】:

  • 是的。只看缩进
  • 好的,但我仍然不知道如何获取天气数组中的 main。
  • 从头开始...看不同的括号类型,并相应地使用数组或对象GetArray("list")...GetObject(0)...GetArray("main")...GetObject(0)...Get("weather")
【解决方案2】:

我认为this 会有所帮助。

MyObject result = new ObjectMapper().readValue(json, MyObject.class);

其中MyObject 是您要反序列化的对象。然后你可以像在 Java 中一样调用属性。

【讨论】:

  • 仅仅为了解析一个字段就产生了很多不必要的开销
  • 好吧,您不一定只是解析一个字段。也许在这个特定的例子中这就是你想要做的,但很多时候你想要整个对象
猜你喜欢
  • 2017-03-27
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-07
  • 2021-04-11
相关资源
最近更新 更多