Java JSON解析嵌套数组对象

Java JSON解析嵌套数组对象,java,arrays,json,nested,Java,Arrays,Json,Nested,在下面的JSON格式的文件中使用,我在理解如何在“name”下访问数组中的对象时遇到了很多困难 JSON文件: [ { "name":{ "firstName": "Developer", "lastName": "D" }, "id": 00, "permissionLevel": 3, "password": 12345 }, {

在下面的JSON格式的文件中使用,我在理解如何在“name”下访问数组中的对象时遇到了很多困难

JSON文件:

[
    {
        "name":{
            "firstName": "Developer",
            "lastName": "D"
        },
        "id": 00, 
        "permissionLevel": 3, 
        "password": 12345
    },
    {
        "name":{
            "firstName": "Bob",
            "lastName": "Smith"
        }, 
        "id": 01, 
        "permissionLevel": 2, 
        "password": 23456
    }
]
我能够获得所有其他内容的信息,因为它们不位于嵌套数组中;但是,当我尝试检索“name”下的对象时,输出的只是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”从JSON文件输出一个字符串,而不是每个单独的值

最后,我需要编写一个通用代码,可以为输入的每个文件接受新的“searchData”标记

  • 有人能告诉我如何获得持有的物品吗 在嵌套数组中
  • 或者我需要使用不同的库?如果是的话,哪一个对Java最有效?我不是在为Android编程,我不断地为Android寻找库建议
    如果这篇文章是个骗局,我深表歉意,但没有其他文章能帮助我。

    你应该得到你的
    名字和
    姓氏,比如:

    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);
            }
        }
    }
    
    publicstaticvoidmain(字符串args[])引发异常{
    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}]”;
    映射对=新的HashMap();
    添加值(对象、对);
    系统输出打印项数(对);
    }
    公共静态void addValues(对象、映射对){
    if(JSONObject的对象实例){
    JSONObject JSONObject=(JSONObject)对象;
    for(字符串键:jsonObject.keySet()){
    if(jsonObject.get(key)instanceof jsonObject | | jsonObject.get(key)instanceof JSONArray){
    addValues(jsonObject.get(键),成对);
    }否则{
    pairs.put(key,jsonObject.get(key));
    }
    }
    }else if(JSONArray的对象实例){
    JSONArray JSONArray=(JSONArray)对象;
    for(对象元素:jsonArray){
    addValue(元素、对);
    }
    }
    }
    

    您可以根据需要调整此方法,使其具有name.firstname或name.lastname等键。

    我知道您希望在解析
    JSON
    时考虑
    searchData
    标记。我建议在这种情况下使用
    Google Gson

    您可以编写一个POJO,返回JSON的
    ArrayList

    请参阅有关的这篇文章

    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);
            }
        }
    }