遍历 JSON 中收到的对象列表

Itterate through List of objects recieved in JSON

我有以下 JSON 数据:

[
  {
    "id": 4,
    "siteName": "site1",
    "addressLine1": "address1",
    "addressLine2": "address2",
    "town": "town1",
    "postcode": "postcode1",
    "contactName": "name1",
    "contactNumber": "number1",
    "contactEmail": "email1"
  },
  {
    "id": 5,
    "siteName": "site2",
    "addressLine1": "address1",
    "addressLine2": "address2",
    "town": "town1",
    "postcode": "postcode1",
    "contactName": "name1",
    "contactNumber": "number1",
    "contactEmail": "email1"
  },
]

我正在解析数据,但它只是输出一长串。我想访问每个对象中的每个元素。

更新:我正在输出单个元素,但出于某种原因 'id' 属性 被认为是双重的?

Map<String,Object> jsonArr = new JSONParser().parseJSON(new InputStreamReader(new ByteArrayInputStream(r.getResponseData()), "UTF-8"));

java.util.List<Map<String, Object>> content = (java.util.List<Map<String, Object>>)jsonArr.get("root");

 for(Map<String, Object> obj : content) {

                                Log.p((int)obj.get("id"));
                                Log.p((String)obj.get("siteName"));
                                Log.p((String)obj.get("addressLine1"));
                                Log.p((String)obj.get("addressLine2"));
                                Log.p((String)obj.get("town"));
                                Log.p((String)obj.get("postcode"));
                                Log.p((String)obj.get("contactName"));
                                Log.p((String)obj.get("contactNumber"));
                                Log.p((String)obj.get("contactEmail"));
                            }

您将获得一个对象数组,因为它以 [ 统计并以 ] 结尾。你必须这样尝试。

    JSONArray jsonArr = new JSONParser().parseJSON(new InputStreamReader(new ByteArrayInputStream(r.getResponseData()), "UTF-8"));
    for (int i = 0; i < jsonArr.length(); i++) {
                String siteName = jsonArr.getJSONObject(i).getString("siteName");
                System.out.println(siteName);
 }

当您使用代号一时,parseJSON 总是 returns a Map<String, Object>,但当根元素是 an 时表现不同大批。在这种情况下,返回的 Map 包含一个对象,其键为 "root",然后您可以对其进行迭代以获取实际对象。

Map<String, Object> data = json.parseJSON(new InputStreamReader(
    new ByteArrayInputStream(r.getResponseData()), "UTF-8"));

List<Map<String, Object>> content = (java.util.List<Map<String, Object>>)data.get("root");

for(Map<String, Object> obj : content) {
    Log.p(obj.getValue().toString());
}

有关 parseJSON 方法的更多信息,请参阅 documentation