2016-03-08 259 views
0

在以下JSON格式的文件上使用Simple-JSON,我很难理解如何访问“名称”下数组内的对象。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找到图书馆建议。

我的道歉,如果这篇文章是一个骗局,但没有其他职位帮助我。

回答

0

你应该让你的firstnamelastname,如:

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

要获得嵌套的数组/对象中持有的对象,你将不得不写一个递归方法和扁平结构成图。下面的例子显示了相同的:

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键。

0

我知道你想在分析JSON时考虑searchData标签。我建议在这种情况下使用Google Gson

您可以编写一个POJO,它将为您的JSON返回ArrayList<User>

请参考此文章how use Google Gson