簡體   English   中英

JSON解析嵌套數組對象

[英]JSON Parsing Nested Array Objects

在以下JSON格式的文件上使用Simple-JSON時,我很難理解如何訪問“名稱”下數組中的對象。

JSON檔案:

[
    {
        "name":{
            "firstName": "Developer",
            "lastName": "D"
        },
        "id": 00, 
        "permissionLevel": 3, 
        "password": 12345
    },
    {
        "name":{
            "firstName": "Bob",
            "lastName": "Smith"
        }, 
        "id": 01, 
        "permissionLevel": 2, 
        "password": 23456
    }
]

我能夠獲取所有其他內容的信息,因為它們不在嵌套數組中; 但是,當我嘗試檢索“名稱”下的對象時,輸出的只是在JSON文件中找到的字符串。

當前代碼:

String[] searchData = {
                    "name",
                    "firstName",
                    "lastName",
                    "id",
                    "permissionLevel",
                    "password"
                };

jsonArray = (JSONArray)new JSONParser().parse(s);
for(int i = 0; i < jsonArray.size(); i++){
    JSONObject jo = (JSONObject)jsonArray.get(i);
    for(int j = 0; j < searchData.length; j++){
        System.out.println(
                searchData[j] + ": " + jo.get(searchData[j]));
    }
}

輸出:

name: [{"firstName":"Developer","lastName":"D"}]
firstName: null
lastName: null
id: 0
permissionLevel: 3
password: 12345
name: [{"firstName":"Bob","lastName":"Smith"}]
firstName: null
lastName: null
id: 1
permissionLevel: 2
password: 23456

如您所見,“名稱”從JSON文件輸出一個字符串,而不是每個單獨的值。

最后,我需要編寫一個通用代碼,該代碼可以為輸入的每個文件接受新的“ searchData”標簽。

  1. 也許有人可以指示我如何獲取嵌套數組中的對象?
  2. 還是我需要使用其他圖書館? 如果是這樣,哪一個對Java最有效? 我不是在為Android編程,因此我一直在不斷尋找Android的圖書​​館建議。

我很抱歉,如果這篇文章是虛假的,但沒有其他文章可以幫助我。

您應該獲得您的firstnamelastname ,例如:

jo.get("name").get("firstname");
jo.get("name").get("lastname");

為了使對象保留在嵌套數組/對象中,您將必須編寫一個遞歸方法並將結構展平為地圖。 下面的示例顯示了相同的內容:

public static void main(String args[]) throws ParseException {
    Object object =  new JSONParser().parse("[    {        \"name\":{            \"firstName\": \"Developer\",            \"lastName\": \"D\"        },        \"id\": 00,         \"permissionLevel\": 3,         \"password\": 12345    },    {        \"name\":{            \"firstName\": \"Bob\",            \"lastName\": \"Smith\"        },         \"id\":01,         \"permissionLevel\": 2,         \"password\": 23456    }]");
    Map<String, Object> pairs = new HashMap<>();
    addValues(object, pairs);
    System.out.println(pairs);
}

public static void addValues(Object object,  Map<String, Object> pairs){
    if(object instanceof JSONObject){
        JSONObject jsonObject = (JSONObject) object;
        for(String key : jsonObject.keySet()){
            if(jsonObject.get(key) instanceof JSONObject || jsonObject.get(key) instanceof JSONArray){
                addValues(jsonObject.get(key), pairs);
            }else{
                pairs.put(key, jsonObject.get(key));
            }
        }
    }else if(object instanceof JSONArray){
        JSONArray jsonArray = (JSONArray)object;
        for(Object element : jsonArray){
            addValues(element, pairs);
        }
    }
}

您可以根據需要調整此方法以使其具有name.firstname或name.lastname之類的鍵。

我了解您在解析JSON時要考慮searchData標記。 我建議在這種情況下使用Google Gson

您可以編寫一個POJO,為您的JSON返回ArrayList<User>

請參閱這篇文章, 了解如何使用Google Gson

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM