java - 解析后对 Groovy 扁平化的 JsonSluper 对象进行排序
问题描述
我有一条 JSON 消息,在使用 JsonSluper 解析它之后,排序被搞砸了。我知道排序并不重要,但是在消息被解析并扁平化为单个对象后,我需要将消息放回升序,因此我可以构建一个 JsonArray 并以正确的 asc 顺序显示消息。
String test = """[
{
"AF": "test1",
"BE": "test2",
"CD": "test3",
"DC": "test4",
"EB": "test5",
"FA": "test5"
},
{
"AF": "test1",
"BE": "test2",
"CD": "test3",
"DC": "test4",
"EB": "test5",
"FA": "test5"
}
]"""
parseText 产生这个:
def json = new groovy.json.JsonSlurper().parseText(test);
[{CD=test3, BE=test2, AF=test1, FA=test5, EB=test5, DC=test4}, {CD=test3,
BE=test2, AF=test1, FA=test5, EB=test5, DC=test4}]
解析 json 消息后,我需要将 flatten json 对象传递给一个方法,在该方法中,在添加到如下所示的 JSONArray 之前,需要按映射键按升序排序。
def json = new groovy.json.JsonSlurper().parseText(test);
for( int c = 0; c < json?.size(); c++ )
doSomething(json[c]);
void doSomething( Object json ){
def jSort= json.????
JSONArray jsonArray = new JSONArray();
jsonArray.add(jSort);
}
</p>
解决方案
您可以在添加条目之前对条目进行排序。以下用途collectEntries
,它创建LinkedHashMap
对象(从而保持顺序):
def json = new groovy.json.JsonSlurper().parseText(test);
def sortedJson = json.collect{map -> map.entrySet().sort{it.key}
.collectEntries{[it.key, it.value]}}
sortedJson
有这个内容,好像是按要求排序的:
[[AF:test1, BE:test2, CD:test3, DC:test4, EB:test5, FA:test5],
[AF:test1, BE:test2, CD:test3, DC:test4, EB:test5, FA:test5]]
推荐阅读
- python - 如何在 Python 中集成 3D 函数?
- python - 在 Python 中的 numpy 数组上交换行的表示法
- javascript - 当平面列表的单元格被按钮包裹时检测滚动
- c++ - E0167 错误:* 类型的 C++ 参数与“FILE**”类型的参数不兼容
- javascript - 如何使用 async/await 从用户那里获取输入,但要等到整个条件语句被读取后再解析?
- angular - 通用指令是否隐式应用于元素?
- php - PHP FPDF上的SQL表列问题
- javascript - 单击时如何更改子组件的颜色?
- python - 在 Python 中从谷歌驱动器访问文件
- rust - 包括长选项,不包括帮助和版本的短选项