是否可以停止时髦,在调用漂亮的字符串时不对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",
}
]
}
它需要停止排序。
中提到了这一点,但我会在这里重申并提供一些解释。JSON 对象是无序的,数组是有序的。这就是它与大多数语言/库(包括Javascript)一起工作的方式。Groovy的JsonSlurper
类和JsonBuilder
类分别使用映射和列表来表示JSON对象和数组。引用 javadocs 作为映射接口:
映射的顺序定义为映射集合视图上的迭代器返回其元素的顺序。某些映射实现(如 TreeMap 类)对其顺序做出特定的保证;其他的,如HashMap类,则没有。
我建议你的应用程序不依赖于 JSON 中键的排序。即使使排序具有确定性,也可能导致代码难以阅读和维护。如果您需要订购某些东西,请考虑将其放在 JSON 数组中。