如何访问 JSONObject 子字段?

2022-09-04 00:59:46

我觉得自己很笨,但我已经四处寻找这个一段时间了。我正在使用Google geocoder API,我需要一些json响应的帮助。这是我拥有的JSONObject:

{
"viewport": {
    "southwest": {
        "lng": -78.9233749802915,
        "lat": 36.00696951970851
    },
    "northeast": {
        "lng": -78.92067701970849,
        "lat": 36.0096674802915
    }
},
"location_type": "ROOFTOP",
"location": {
    "lng": -78.922026,
    "lat": 36.0083185
}
}

如何将“位置”子字段提取到它们自己的变量中?我试过了等等,但它没有正确返回。如何称呼 json 对象中的子字段?我已经读到你可以使用object.subobject语法访问子字段,但我只是没有得到我需要的东西。jsonObjectVariable.getString("location");jsonObjectVariable.getDouble()

(我使用json-org作为库)

感谢您的帮助!


答案 1

使用适用于 Java 的 json.org 库,您只能通过首先获取父实例来获取对象的各个属性:JSONObject

JSONObject object = new JSONObject(json);
JSONObject location = object.getJSONObject("location");
double lng = location.getDouble("lng");
double lat = location.getDouble("lat");

如果您尝试使用“虚线表示法”访问属性,如下所示:

JSONObject object = new JSONObject(json);
double lng = object.getDouble("location.lng");
double lat = object.getDouble("location.lat");

那么 json.org 库就不是你要找的:它不支持这种访问。


作为一个侧节点,调用问题中给出的 JSON 的任何部分都没有意义。唯一称为“location”的属性的值是另一个具有两个属性(称为“lng”和“lat”)的对象。getString("location")

如果你想要这个“作为字符串”,最接近的事情是调用(这个答案中的第一个代码片段),它会给你类似的东西。toString()JSONObject location{"lng":-78.922026,"lat":36.0083185}


答案 2

我相信你需要使用jsonObjectVariable.getJSONObject(“location”),它反过来返回另一个JSONObject。

然后,您可以在该对象上调用getDouble(“lng”)或getDouble(“lat”)。

例如:

double lat = jsonObjectVariable.getJSONObject("location").getDouble("lat");