如何访问JSONObject子字段?

El *_*ino 10 java json 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
}
}
Run Code Online (Sandbox Code Playgroud)

如何将"位置"子字段拉入自己的变量?我试着jsonObjectVariable.getString("location");jsonObjectVariable.getDouble()等,但它无法正常返回.你在json对象中称为子字段是什么?我已经读过你可以使用object.subobject语法访问子字段,但我只是没有得到我需要的东西.

(我使用json-org作为库)

谢谢您的帮助!

Phi*_*art 19

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

JSONObject object = new JSONObject(json);
JSONObject location = object.getJSONObject("location");
double lng = location.getDouble("lng");
double lat = location.getDouble("lat");
Run Code Online (Sandbox Code Playgroud)

如果您尝试使用"点分表示法"访问属性,请执行以下操作:

JSONObject object = new JSONObject(json);
double lng = object.getDouble("location.lng");
double lat = object.getDouble("location.lat");
Run Code Online (Sandbox Code Playgroud)

然后json.org库不是你想要的:它不支持这种访问.


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

如果你想这个"作为一个字符串",最接近的就是调用toString()JSONObject location(在这个答案第一个代码段),这将给你喜欢的东西{"lng":-78.922026,"lat":36.0083185}.


Bru*_*owe 5

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

然后,您可以对该对象调用 getDouble("lng") 或 getDouble("lat")。

例如

double lat = jsonObjectVariable.getJSONObject("location").getDouble("lat");
Run Code Online (Sandbox Code Playgroud)