FastJson 解决JSON转嵌套Map出现的顺序乱序问题

弄了一天的问题,感谢大神

转自:http://inlhx.iteye.com/blog/2312512

  最近项目中用到了fastjson(1.2.15)需要将前端多层嵌套json转换为map,由于map的无序性,想了很多办法,最终找到使用 Map m= JSONArray.parseObject(json, LinkedHashMap<String,String>.class); 来转换,问题来了,第一层顺序是对的,但是第二层排序居然出问题了,目前仅仅只是需要转换成String 他居然把String都给自动排序了,后来网上查了很多资料发现还可以采用一种方式:

Java代码 

JSONObject jsonObj = new JSONObject(true);  
Map m= jsonObj.parseObject(json, LinkedHashMap.class);  

传入Json:

{"t1":"","t3":"","t2":{"a1":"","a3":"","a2":""}}

输出:

{t1=, t3=, t2={"a1":"","a2":"","a3":""}}

无奈,跟踪fastjson源码,花了2小时在com.alibaba.fastjson.parser.DefaultJSONParser 类中475行发现

Java代码 

else if (ch == '{') { // 减少嵌套,兼容android  
                   lexer.nextToken();  
  
final boolean parentIsArray = fieldName != null && fieldName.getClass() == Integer.class;  
  
 <span style="color: #ff0000;"><strong>JSONObject input =
 new JSONObject(lexer.isEnabled(Feature.OrderedField)</strong></span>);  

居然这里面判断了Feature.OrderedField

果断知道了解决办法:

HashMap m=  JSON.parseObject(json,LinkedHashMap.class,Feature.OrderedField);

搞定,输出结果:

{t1=, t3=, t2={"a1":"","a3":"","a2":""}}

转自:http://inlhx.iteye.com/blog/2312512

另外附上 mao 转 json 代码

Map<String, Object> resultMsg = new HashMap<String, Object>();
		resultMsg.put("serial_no", serial_no);
		resultMsg.put("service_id", service_id);
		resultMsg.put("ret_code", status);
		resultMsg.put("ret_msg", msg);
		resultMsg.put("result_content", "");
		/** 针对公共返回信息处理*/
		com.alibaba.fastjson.JSONObject json = new com.alibaba.fastjson.JSONObject(resultMsg);
		

猜你喜欢

转载自blog.csdn.net/qq_25623257/article/details/85252360