fastjson中JSONObject遍历怎么不是有序的

藏言 发布于 2013/04/19 10:27
阅读 24K+
收藏 2
fastjson中JSONObject 使用keySet和entrySet进行遍历,发现顺序是乱序的,执行几次,遍历结果每次顺序都不一样,fastjson不是默认排序的吗?怎么才能按排序遍历出来
加载中
0
藏言
藏言
@鉴客 @wenshao 求教,要怎么才能是按排序遍历出来,谢谢!
0
a
aoems

修改org.json.JSONObject的构造函数,

public JSONObject() {

        this.map = new LinkedHashMap();  //new HashMap();

}

原文连接:http://blog.csdn.net/choclover/article/details/6684954

0
灌直
灌直
一定要改原码么?
0
y
ysn521

直接把你待解析的hashMap对象声明为LinkedHashMap类型不就行了?

宅男小何
宅男小何
@黄正文 json内部用的hashmap吧
黄正文
黄正文
不行,申明为linkedHashMap转为json后仍然会变为无序的
0
s
safetys
晕死,11年到14年,这问题还没解决,太不负责任了。
0
s
safetys
public static Map<String, LinkedHashMap<String, Lv2>> parseData(String data)
	{
		
		try
		{
			return JSON.parseObject(data, new TypeReference< Map<String, LinkedHashMap<String, Lv2>>>(){});
		} catch (Exception e)
		{
			System.out.println(e);
		}
		
		return null;
	}



这样搞,就OK,不用修改源码了。
s
safetys
回复 @Diversity : 自定义的对象啊。好比 一个class Student 有属性 name 和 age 。
在途
在途
你好 你这lv2泛型是啥?
0
Fly的狐狸
Fly的狐狸
我也遇到相同的问题了~!~改成LinkedHashMap依然不行~toString后数据顺序还是被修改了
0
Fly的狐狸
Fly的狐狸

引用来自“zcool321”的评论

我也遇到相同的问题了~!~改成LinkedHashMap依然不行~toString后数据顺序还是被修改了
暂时只能用数组解决
0
wlhjkl
wlhjkl
Json原生的解释里有这么一说:JSONObject是无序的,即put进去或者new JsonObject(String jsonString),这样产生的Json对象都是无序的。而JSONArray是有序的,如果需要搞成有序的,直接用数组即可,可以是如下格式:拼凑为类似[{key,value},{key,value},{key,value}...],就是有序的了。但会麻烦些,如果需要有序的,还是得去看源码!直接在源码基础上修改。
张冬
张冬
发现fastjson已经支持指定使用LinkedHashMap了,可以看我的回答
0
Tom-Lin
Tom-Lin
这里有说明:

使用ordinal指定字段的顺序


https://github.com/alibaba/fastjson/wiki/JSONField
张冬
张冬
这个好像只能用于javabean的序列化啊,我是编辑jsonObject再toString时无序,这个方法貌似不适用。不过我发现fastjson已经支持指定使用LinkedHashMap了,可以看我的回答
返回顶部
顶部