时髦的 JSON 漂亮的字符串不排序



是否可以停止时髦,在调用漂亮的字符串时不对JSON字符串进行排序?

编写了一个程序,它从文件中读取JSON字符串,对JSON字符串进行一些更改并将其写回文件。

JSON 字符串示例

{
    "Obj1": [
        {
            "Val3": "CCIPDS",
            "Val1": [
            {
                "tn4": "111",
                "tn1": "222",
                "moretn": [
                {
                    "c6": "ch_ssn",
                    "b5": "ssn"
                }
                ]
            }
            ]
        }
    ]
}

问题是当它写回文件时,它会更改标签的顺序,如下所示使用此代码写回

File jsonFile = new File('JsonFile.json')
String newJson = new JsonBuilder(jsonStringToWrite).toPrettyString()
jsonFile.withWriter('UTF-8')
{ 
    it << newJson 
}

和字符串更新如下

{
    "Obj1": [
        {      
            "Val1": [
            {
                "tn1": "222",
                "tn4": "111",          
                "moretn": [
            {
                "b5": "ssn",
                "c6": "ch_ssn"              
            }
          ]
        }
        ],
        "Val3": "CCIPDS",
        }
    ]
}

它需要停止排序。

tim_yates评论

中提到了这一点,但我会在这里重申并提供一些解释。JSON 对象是无序的,数组是有序的。这就是它与大多数语言/库(包括Javascript)一起工作的方式。Groovy的JsonSlurper类和JsonBuilder类分别使用映射和列表来表示JSON对象和数组。引用 javadocs 作为映射接口:

映射

的顺序定义为映射集合视图上的迭代器返回其元素的顺序。某些映射实现(如 TreeMap 类)对其顺序做出特定的保证;其他的,如HashMap类,则没有。

我建议你的应用程序不依赖于 JSON 中键的排序。即使使排序具有确定性,也可能导致代码难以阅读和维护。如果您需要订购某些东西,请考虑将其放在 JSON 数组中。

最新更新