解析Android中的json对象和json数组[duplicate]

ovfsdjhp  于 2023-03-24  发布在  Android
关注(0)|答案(1)|浏览(122)

此问题在此处已有答案

How to parse JSON in Java(36个答案)
九年前就关门了。
我有一个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字符串。我需要“title”对象和“lat”和“lon”的“coordinates”数组...
最后我解决了。谢谢大家这样解决:

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();
        }
68de4m5k

68de4m5k1#

我的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...
            }
        }
    }
});

相关问题