json.parseobject()的set方法设置顺序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了json.parseobject()的set方法设置顺序相关的知识,希望对你有一定的参考价值。
在开发过程中遇到一个问题:服务器经过排序返回后的字符串数据在使用fastjson解析后,数据顺序发生了变化,这个问题也就是:使用fastjson解析数据后导致顺序改变或者说是如何保持String字符串转为json对象时顺序不变解决方法:
方法一:解析时增加参数不调整顺序(亲测使用有效)
JSONObject respondeBodyJson = JSONObject.parseObject(str, Feature.OrderedField);
方法二:配置有序对象
JSONObject.parseObject(str,LinkedHashMap.class,Feature.OrderedField);
方法三:初始化json对象为有序对象
JSONObject retObj = new JSONObject(true);
方法四:使用Gson解析
JsonObject returnData = new JsonParser().parse(str).getAsJsonObject();
这样生成的json对象就与放入数据时保持一致了
注意:引入的fastjson相关的jar包版本要高于1.2.3,因为Feature.OrderedField是从1.2.3开始的 参考技术A 取出数据库中的字符串通过前端的JSON.parse(str)遍历显示key,value值。到此一个新的要求是要显示的顺序和数据库中保持一致,通过JSON.parse()通常会按照key排序。所以使用JSON.parse失败。
只能手动获取字符串中的key,value值,最好的方式是采用正则,不然也可以采用 replace,replaceALl,split等方法逐步分割在回到如果不需要保持顺序的情况下,使用JSON.parse()遇到了抛出异常的问题,一看数据库中的内容,发现并不是标准的JSON格式,比如这段name:“张三”,age:12,此时使用JSON.parse便会抛出异常,所以需要改为“name”:“张三”,age:12 解决的思路是前端给该字符串补全双引号,不过也可以用JAVA。
思路是通过fastjson库将字符串转换为JSON对象,在转回JSON字符串。这里利用了fastjson对JSON格式要求不严格
在使用fastjson直接将字符串转为JSON对象后在转换回JSON字符串,顺序将保证不了。修改代码这里仅仅对key,value形式,key不带双引号的,value仅仅是字符串(也仅带特殊符号":")的处理,对于嵌套的JSON格式或者value值为时间,数字,其它转义特殊符号还考虑。还有些地方需要完善。
以上是关于json.parseobject()的set方法设置顺序的主要内容,如果未能解决你的问题,请参考以下文章
JSON.parseObject 和 JSON.toJSONString