JSON解析保证顺序的问题(部分想法)

JSON解析保证顺序的问题(部分想法)

前提

碰到这样一个问题,在数据库中一个字段中的内容是一段字符串的json数据,包括一系列的key:value值,无嵌套和其它要求,例如 “{key1:value1,key2:value2,key3:value3}”,从数据库中取出来,在前端以key 和value用表格显示。如下图

名称
key1value1
key2value2
key3value3

思路

取出数据库中的字符串通过前端的JSON.parse(str)遍历显示key,value值。到此一个新的要求是要显示的顺序和数据库中保持一致,通过JSON.parse()通常会按照key排序。所以使用JSON.parse失败。

只能手动获取字符串中的key,value值,最好的方式是采用正则,不然也可以采用 replace,replaceALl,split等方法逐步分割

//去掉左右{}括号
str= str.replace("{","");
str = str.replace("}","");
//按照双引号分割数组,在遍历数组筛选key,value值
const arr = str.scriptParam.split("\"");
//p 不按照":"分割是因为value值中也可能有特殊符号":"

在回到如果不需要保持顺序的情况下,使用JSON.parse()遇到了抛出异常的问题,一看数据库中的内容,发现并不是标准的JSON格式,比如这段{name:“张三”,age:12},此时使用JSON.parse便会抛出异常,所以需要改为{“name”:“张三”,age:12} 解决的思路是前端给该字符串补全双引号,不过也可以用JAVA。

思路是通过fastjson库将字符串转换为JSON对象,在转回JSON字符串。这里利用了fastjson对JSON格式要求不严格

在使用fastjson直接将字符串转为JSON对象后在转换回JSON字符串,顺序将保证不了。修改代码

JSONObject jsonObject =  JSONObject.parseObject(str, Feature.OrderedField);
str = JSONObject.toJSONString(jsonObject);

这里仅仅对key,value形式,key不带双引号的,value仅仅是字符串(也仅带特殊符号":")的处理,对于嵌套的JSON格式或者value值为时间,数字,其它转义特殊符号还考虑。还有些地方需要完善。

其它

jdk 8;fastjson fastjson-1.2.58 ;

JSON解析保证字段顺序终极总结

fastjson与jackson解析key没有引号的json

json的单引号和双引号问题(亲测有效)

javascript: json.parse()去掉默认按首字母排序的规则

Java 手动解析不带引号的JSON字符串的操作
JsonObject数据顺序问题

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值