如何使用 gson 创建按键排序的 json?

2023-11-24

我需要创建常量 json 字符串或按键排序的 json。常量 json 字符串是什么意思?请查看我创建的以下代码示例。

我的代码1:

public class GsonTest
{
    class DataObject {

        private int data1 = 100;
        private String data2 = "hello";

    }   


    public static void main(String[] args)
    {
        GsonTest obj=new GsonTest();
        DataObject obj2 = obj.new DataObject();
        Gson gson = new Gson();

        String json = gson.toJson(obj2);
        System.out.println(json);
    }
}

输出1:

{"data1":100,"data2":"hello"}

我的代码2:

public class GsonTest
{
    class DataObject {
        private String data2 = "hello";
        private int data1 = 100;


    }   


    public static void main(String[] args)
    {
        GsonTest obj=new GsonTest();
        DataObject obj2 = obj.new DataObject();
        Gson gson = new Gson();

        String json = gson.toJson(obj2);
        System.out.println(json);
    }
}

输出2:

{"data2":"hello","data1":100}

如果你看到了,如果我切换变量(data1 & data2 in DataObject类),我得到不同的 json。我的目标是获得相同的 json,即使有人更改了类变量的位置。当有人添加新变量时,我明白了,json 会改变。但是当变量移动时 json 不应该改变。所以,我的目标是获得标准 json,可能按同一类的排序键顺序。如果有嵌套的json,那么应该在嵌套结构中排序。

运行这两个代码的预期输出:

{"data1":100,"data2":"hello"}  //sorted on keys!! Here keys are data1 & data2

我明白,我需要改变一些东西String json = gson.toJson(obj2);线,但我该怎么办?

为什么我需要它们来订购?

我需要对 json 字符串进行编码,然后将其传递给另一个函数。如果我更改键的顺序,即使值保持不变,编码值也会改变。我想避免这种情况。


首先,json对象的键是无序的根据定义,参见http://json.org/.

如果您只想要一个带有有序键的 json 字符串,您可以尝试将 json 反序列化为排序映射,然后序列化该映射以获得按键排序的 json 字符串。

GsonTest obj=new GsonTest();
DataObject obj2 = new DataObject();
Gson gson = new Gson();

String json = gson.toJson(obj2);
TreeMap<String, Object> map = gson.fromJson(json, TreeMap.class);
String sortedJson = gson.toJson(map);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 gson 创建按键排序的 json? 的相关文章

随机推荐