gpt4 book ai didi

java - Android中解析json对象和json数组

转载 作者:行者123 更新时间:2023-12-01 13:39:08 32 4
gpt4 key购买 nike

我有这个 JSON 字符串:

{
"query": {
"pages": {
"53113": {
"pageid": 53113,
"ns": 0,
"title": "Charing Cross",
"coordinates": [
{
"lat": 51.5073,
"lon": -0.12755,
"primary": "",
"globe": "earth"
}
]
},
"33109245": {
"pageid": 33109245,
"ns": 0,
"title": "Equestrian statue of Charles I, Charing Cross",
"coordinates": [
{
"lat": 51.5073,
"lon": -0.12768,
"primary": "",
"globe": "earth"
}
]
},
"4347521": {
"pageid": 4347521,
"ns": 0,
"title": "Greater London Built-up Area",
"coordinates": [
{
"lat": 51.5073,
"lon": -0.1277,
"primary": "",
"globe": "earth"
}
]
},
"17867": {
"pageid": 17867,
"ns": 0,
"title": "London",
"coordinates": [
{
"lat": 51.5072,
"lon": -0.1275,
"primary": "",
"globe": "earth"
}
]
}
}
}
}

我该如何解析它?我编写了这段代码,但无法迭代 json 字符串。我需要“标题”对象以及“纬度”和“经度”的“坐标”数组...

最后我解决了。谢谢你们像这样解决了:

            try {
// Parsing JSON String or URL
JSONObject jsonObj = new JSONObject(jsonurl);


// grabbing objects
JSONObject obj_query = jsonObj.getJSONObject(TAG_QUERY);
JSONObject obj_pages = obj_query.getJSONObject(TAG_PAGES);
JSONArray arr_id = obj_pages.names();

for (int i = 0 ; i < arr_id.length() ; i ++)
{
JSONObject obj_id = obj_pages.getJSONObject(arr_id.get(i).toString());
// Log.i(LOGTAG, "obj_id: " + obj_id.toString());

String tag_pageid = obj_id.getString(TAG_PAGEID);
// String tag_ns = obj_id.getString(TAG_NS);
String tag_title = obj_id.getString(TAG_TITLE);
Log.i(LOGTAG, "page id: " + tag_pageid);
// Log.i(LOGTAG, tag_ns);
Log.i(LOGTAG, "Title: " + tag_title);
// using JSONArray to grab the TAG_COORDINATES

JSONArray arr_coord = obj_id.getJSONArray(TAG_COORDINATES);
// lets loop through the JSONArray and get all the items
for (int j = 0; j < arr_coord.length(); j++) {
// printing the values to the logcat
Log.i(LOGTAG, "lat:" + arr_coord.getJSONObject(j).getString(TAG_LAT).toString());
Log.i(LOGTAG, "lon: " + arr_coord.getJSONObject(j).getString(TAG_LON).toString());
}

}

} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

最佳答案

我的droidQuery库中有一些方法可以大大简化此任务:

$.getJSON(jsonurl, null, new Function() {
@Override
public void invoke($ d, Object… args) {
JSONObject json = (JSONObject) args[0];
JSONObject query = json.getJSONObject(TAG_QUERY);
JSONObject pages = json.getJSONObject(TAG_PAGES);
Map<String, ?> map = $.map(pages);
for (Entry<String, ?> entry : map.entrySet()) {
String key = entry.getKey();//this is the number, such as 53113
JSONObject value = (JSONObject) entry.value();
Map<String, ?> data = $.map(value);//contains all the fields you need
String title = (String) data.get("title");//<--- THIS IS THE TITLE FIELD
JSONArray array = (JSONArray) data.get("coordinates");
Object[] data = $.array(array);
for (Object o : data) {
//loops through each coordinates object
JSONObject coordinates = (JSONObject) o;//<--- THIS IS THE FIRST COORDINATE OBJECT
//now handle this coordinates data:
Map<String, ?> coords = $.map(coordinates);
double lat = (double) coords.get("lat");
double lon = (double) coords.get("lon");
//etc...
}
}
}
});

关于java - Android中解析json对象和json数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20977275/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com