繁体   English   中英

如何在 JAVA 中按给定顺序读取 JSON 对象?

[英]How to read the JSON object in the given order in JAVA?


static String a = "{\n" + 
            "    \"name\": \"Praveen\",\n" + 
            "    \"address\": \"Avadi\",\n" + 
            "    \"Place\": \"Chennai\",\n" + 
            "    \"Friends\": [{\n" + 
            "        \"name\": \"kumaresh\",\n" + 
            "        \"address\": \"paruthipetu\",\n" + 
            "        \"Place\": [\"Chennai\", \"Mumbai\"],\n" + 
            "        \"Friends\": {\n" + 
            "            \"name1\": \"Midhun\",\n" + 
            "            \"name2\": \"vicky\"\n" + 
            "        }\n" + 
            "    },{\n" + 
            "        \"hair\": \"black\"\n" + 
            "    }],\n" + 
            "    \"number\": {\n" + 
            "        \"homeNo\": false,\n" + 
            "        \"phoneNo\": 8926363636\n" + 
            "    },\n" + 
            "    \"age\": 24,\n" + 
            "    \"age1\": 26\n" + 
            "}";

public static ArrayList<Object> extractKeysValues(String test, String parentKey) throws Exception {
         ArrayList<Object> arraylist = new ArrayList<Object>();
         if(test.charAt(0)=='{') {
             //object
             JSONObject json_object = new JSONObject(test);
             Iterator<String> keys = json_object.keys();
             while(keys.hasNext()) {
                String key = keys.next();
                arraylist.add(key);
                arraylist.add(json_object.get(key));
                arraylist.add(parentKey);
                if(json_object.get(key) instanceof JSONObject || json_object.get(key) instanceof JSONArray) {
                    arraylist.addAll(extractKeysValues(json_object.get(key).toString(),key));
                }
            }
         } else if(test.charAt(0)=='[') {
             //array
             JSONArray json_array = new JSONArray(test);
                int json_array_length = json_array.length();
                for(int i=0;i<json_array_length;i++) {
                    String key = json_array.get(i).toString();
                    arraylist.add(String.valueOf(i));
                    arraylist.add(key);
                    arraylist.add(parentKey);
                    if(json_array.get(i) instanceof JSONObject || json_array.get(i) instanceof JSONArray) {
                        arraylist.addAll(extractKeysValues(json_array.get(i).toString(),String.valueOf(i)));
                    }
                }
         }
         return arraylist;
     }

System.out.println(extractKeysValues(a,"root"));

OUTPUT:

[number, {"homeNo":false,"phoneNo":8926363636}, root, homeNo, false, number, phoneNo, 8926363636, number, address, Avadi, root, Friends, [{"address":"paruthipetu","Friends":{"name2":"vicky","name1":"Midhun"},"name":"kumaresh","Place":["Chennai","Mumbai"]},{"hair":"black"}], root, 0, {"address":"paruthipetu","Friends":{"name2":"vicky","name1":"Midhun"},"name":"kumaresh","Place":["Chennai","Mumbai"]}, Friends, address, paruthipetu, 0, Friends, {"name2":"vicky","name1":"Midhun"}, 0, name2, vicky, Friends, name1, Midhun, Friends, name, kumaresh, 0, Place, ["Chennai","Mumbai"], 0, 0, Chennai, Place, 1, Mumbai, Place, 1, {"hair":"black"}, Friends, hair, black, 1, name, Praveen, root, Place, Chennai, root, age, 24, root, age1, 26, root]

EXPECTED OUTPUT:

[name, Praveen, root, address, Avadi, root, Place, Chennai, root, Friends,[{name:'kumaresh',address: 'paruthipetu',Place: ["Chennai","Mumbai"], Friends: {"name1":"Midhun","name2":"vicky"}},{ hair: 'black' }], root, 0,{name: 'kumaresh', address: 'paruthipetu', Place: [ 'Chennai', 'Mumbai' ], Friends: { name1: 'Midhun', name2: 'vicky' }}, Friends, name, kumaresh, 0, address, paruthipetu, 0, Place,[ 'Chennai', 'Mumbai' ], 0, 0, Chennai, Place, 1, Mumbai, Place, Friends, { name1: 'Midhun', name2: 'vicky' }, 0, name1, Midhun, Friends, name2, vicky, Friends, 1, { hair: 'black' }, Friends, hair, black, 1, number, { homeNo: false, phoneNo: 8926363636 }, root, homeNo, false, number, phoneNo, 8926363636, number, age, 24, root, age1, 26, root]

有人可以帮我实现预期的输出吗?

我在这段代码中想要实现的是,需要遍历任何数组或对象才能使用 java. 存储在格式键、值、父键中的值。

我使用递归来解决这个问题。 没有递归的解决方案也非常受欢迎。

关于以“给定顺序”进行迭代:

JSON 对象本质上是无序的,因此您正在尝试一些无法完成的事情。 只有 JSON 数组是有序的。

“{ ... }”中的对象在 Java 中表示为从键到值的映射,原始顺序和迭代映射键之间没有关系。

结果是,一个期望通过 JSON 来回保持键顺序的程序是没有根据的。

关于递归:

由于一个对象可以包含数组,而一个数组也可以包含对象,因此递归方法是最简单、最清晰的编写方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM