序列特征怎么保证顺序

序列特征怎么保证顺序,第1张

说到json,相信没有程序员会陌生,我们天天都在用。那么,我们来讨论个问题,json有序吗?是谁来决定的呢?如何保持?

说到底,json是框架还是啥?实际上它只是一个数据格式,一个规范标准,它永远不会限制实现方的任何 *** 作,即不会自行去保证什么顺序性之类的。json的格式仅由写入数据的一方决定其长相如何。而数据读取一方,则按照json的协议标准进行解析,即可理解原数据的含义。json拥有较为丰富的数据格式,所以对当前应用还是比较友好的。

那么,我们如何处理json的顺序性呢?

1. 保持json有序的思路

首先,我们要澄清有序性的概念:从某种程度上,我们可以把json看作是一个个的kv组成的数据,从这个层面上来讲,我们可以把有序性定义为json的key保持有序,先假设为字典序吧,那么就说这个json数据是有序的。

其次,因为json的数据支持嵌套,所以,我们应该需要保持每一层的数据都有序,才是完整有序的。

ok, 理解完有序的概念,下面我们来看看如何实现有序?

json本身是不可能保持有序了,所以,当我们自行写入json数据时,只需要按照 abcde... 这种key顺序写入数据,那么得到的最终json就是有序的。

但我们一般都是使用对象进行程序变换的,所以,就应该要从对象中取出有序的key, 然后序列化为json.

这里保持有序,至少有两个层面的有序:

kv形式的key的有序;

列表形式的数据有序; 还有其他可能非常复杂的有序性需求,比如按照某字段有序,倒序...

所以,想保持json有序很简单,保证有序写入就可以了。(貌似等于没有说哦)

2. 保持json有序的应用场景举例

为什么要保持json有序呢?json相当于kv数据,一般情况下我们是不需要保证有序的,但有些特殊情况下也许有用。比如我有两份json数据,我想比较它们是否是相等的时候!

比如第一份数据是 {"a":1, "b":2}, 第二份数据是 {"b":2, "a":1}, 那么你说这两份数据是否是相等的呢?相等或不相等依据是啥?

如果对于固定数据结构的json, 那么也许我们可以直接取出每个key的值,然后进行比较,全部相等则相等成立,否则不相等。

但对于json本身就是各种不确定的数据组成,如果我们限制死必须取某些key, 那么这个通用性就很差了。所以,我们要想比较两个json是否相等,还应该要

#Map转json数据出现顺序乱的问题,如果需要保持顺序,可以使用JSONObject 对象的toString()方法;

public static void main(String[] args) {

    Map<String, String>map = new LinkedHashMap<String, String>()

    map.put("3", "ccccc")

    map.put("1", "aaaaa")

    map.put("2", "bbbbb")

    map.put("4", "ddddd")

    System.out.println("默认自动排序")

    System.out.println(ResultVOUtil.success(map))

输出结果:

自动排序

{"msg":"成功","code":"0","data":{"1":"aaaaa","2":"bbbbb","3":"ccccc","4":"ddddd"}}

 //////////////////////////////////解决方案/////////////////////////////////////////////////////

    JSON json = JSONUtil.parse(map)

    JSONObject obj = new JSONObject()

    obj.put("code", '0')

    obj.put("msg", "成功")

    obj.put("data", json)

    System.out.println("保持原始顺序")

    System.out.println(obj.toString())

  }

输出结果:

保持原始顺序

{"msg":"成功","code":"0","data":{"3":"ccccc","1":"aaaaa","2":"bbbbb","4":"ddddd"}}

你好!

需要引入fastjson这个jar包,而且版本要高于1.2.3,因为Feature.OrderedField是从1.2.3开始引入的。

import java.util.HashMap

import java.util.LinkedHashMap

 

import com.alibaba.fastjson.JSONObject

import com.alibaba.fastjson.parser.Feature

 

public class Test {

    public static void main(String[] args) {

        JSONObject json = new JSONObject()

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

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

        System.out.println(m.toString())

    }

} 结果:

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

希望对你有帮助!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11637513.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存