ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java学习之String转换成JSONObject/JSONArray时保证顺序不变

2021-09-18 15:00:06  阅读:209  来源: 互联网

标签:userNmae Java String iterator JSONArray JSONObject wangwu zhangsan


com.alibaba.fastjson.JSONObject:

String在转JSONObject,顺序可能会改变,这样如果需要对结果进行循环时就无法保证顺序和想要的结果一致。

例如:

        String textObject = "{\"row1\":{\"userNmae\":\"zhangsan\"},\"row2\":{\"userNmae\":\"lisi\"},\"row3\":{\"userNmae\":\"wangwu\"}}";
        JSONObject json1 = JSONObject.parseObject(textObject);
        Iterator<String> iterator = json1.keySet().iterator();
        int i = 1;
        while (iterator.hasNext()) {
            String key = iterator.next();
            System.out.println(i + " : " + json1.get(key));
            i++;
        }

想要结果:

1 : {"userNmae":"zhangsan"}
2 : {"userNmae":"lisi"}
3 : {"userNmae":"wangwu"}

实际结果:

1 : {"userNmae":"zhangsan"}
2 : {"userNmae":"wangwu"}
3 : {"userNmae":"lisi"}

 解决办法:

转换时加上:Feature.OrderedField

例如:

        String textObject = "{\"row1\":{\"userNmae\":\"zhangsan\"},\"row2\":{\"userNmae\":\"lisi\"},\"row3\":{\"userNmae\":\"wangwu\"}}";
        int i = 1;
        JSONObject json2 = JSONObject.parseObject(textObject, Feature.OrderedField);
        Iterator<String> iterator2 = json2.keySet().iterator();
        while (iterator2.hasNext()) {
            String key = iterator2.next();
            System.out.println(i + " : " + json2.get(key));
            i++;
        }

想要结果:

1 : {"userNmae":"zhangsan"}
2 : {"userNmae":"lisi"}
3 : {"userNmae":"wangwu"}

实际结果:

1 : {"userNmae":"zhangsan"}
2 : {"userNmae":"lisi"}
3 : {"userNmae":"wangwu"}

 

com.alibaba.fastjson.JSONArray:

 根据JSONObject拓展一下:假如JSONArray中包含JSONObject,在调用“JSONObject.parseArray()”时也无法保证顺序。

例如:

       String textArray = "[{\"people\":{\"row1\":{\"userNmae\":\"zhangsan\"},\"row2\":{\"userNmae\":\"lisi\"},\"row3\":{\"userNmae\":\"wangwu\"}}}]";
        JSONArray array1 = JSONObject.parseArray(textArray);
        for (int i = 0; i < array1.size(); i++) {
            JSONObject jsonObject = array1.getJSONObject(i);
            Iterator<String> iterator = jsonObject.keySet().iterator();
            while (iterator.hasNext()) {
                String key = iterator.next();
                JSONObject inner = jsonObject.getJSONObject(key);
                Iterator<String> innerIter = inner.keySet().iterator();
                int flag = 1;
                while (innerIter.hasNext()) {
                    String innerKey = innerIter.next();
                    String innerValue = inner.getString(innerKey);
                    System.out.println(flag + " : " + innerValue);
                    flag++;
                }
            }
        }

想要结果:

1 : {"userNmae":"zhangsan"}
2 : {"userNmae":"lisi"}
3 : {"userNmae":"wangwu"}

实际结果:

 

1 : {"userNmae":"zhangsan"}
2 : {"userNmae":"wangwu"}
3 : {"userNmae":"lisi"}

解决办法:

参考JSONObject,加 “Feature.OrderedField”,并且转换一下JSONArray的解析方式。

    String textArray = "[{\"people\":{\"row1\":{\"userNmae\":\"zhangsan\"},\"row2\":{\"userNmae\":\"lisi\"},\"row3\":{\"userNmae\":\"wangwu\"}}}]";
        //不直接转Array,调用parse()方法,当作JSONObject转,然后强制转换。
        JSONArray array1 = (JSONArray) JSONObject.parse(textArray, Feature.OrderedField);
        for (int i = 0; i < array1.size(); i++) {
            JSONObject jsonObject = array1.getJSONObject(i);
            Iterator<String> iterator = jsonObject.keySet().iterator();
            while (iterator.hasNext()) {
                String key = iterator.next();
                JSONObject inner = jsonObject.getJSONObject(key);
                Iterator<String> innerIter = inner.keySet().iterator();
                int flag = 1;
                while (innerIter.hasNext()) {
                    String innerKey = innerIter.next();
                    String innerValue = inner.getString(innerKey);
                    System.out.println(flag + " : " + innerValue);
                    flag++;
                }
            }
        }

实际结果:

1 : {"userNmae":"zhangsan"}
2 : {"userNmae":"lisi"}
3 : {"userNmae":"wangwu"}

 

标签:userNmae,Java,String,iterator,JSONArray,JSONObject,wangwu,zhangsan
来源: https://www.cnblogs.com/Bernard94/p/15308423.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有