json - 使用 xslt 更改 json 的顺序
问题描述
我有一个json数组..
如何将json的顺序更改为另一个。
输入json文件
[
{
"fileName": "file1.xml",
"value": [
{
"data1": [
{
"data2": [
{
"data3": [
{
"data4": [
{
"tag3": [
"ss"
],
"tag2": [
"fg"
],
"tag1": [
"df"
]
},
{
"tag2": [
"ss"
],
"tag1": [
"fg"
],
"tag3": [
"df"
]
}
]
}
]
}
]
}
]
}
]
},
{
"fileName": "file2.xml",
"value": [
{
"data1": [
{
"data2": [
{
"data3": [
{
"data4": [
{
"tag2": [
"ss"
],
"tag1": [
"fg"
],
"tag3": [
"df"
]
},
{
"tag1": [
"ss"
],
"tag3": [
"fg"
],
"tag2": [
"df"
]
}
]
}
]
}
]
}
]
}
]
}
]
在输入 json 文件中,如果您看到每个 json 对象中的 tag1、tag2、tag3 键正在更改..
那么如何将json的顺序更改为json下面的预期......
顺序应始终为 tag1、tag2、tag3 ...
我尝试了很多方法来做到这一点。任何人都可以给出最好的方法。
预期输出:-
[
{
"fileName": "file1.xml",
"value": [
{
"data1": [
{
"data2": [
{
"data3": [
{
"data4": [
{
"tag1": [
"df"
],
"tag2": [
"fg"
],
"tag3": [
"ss"
]
},
{
"tag1": [
"fg"
],
"tag2": [
"ss"
],
"tag3": [
"df"
]
}
]
}
]
}
]
}
]
}
]
},
{
"fileName": "file2.xml",
"value": [
{
"data1": [
{
"data2": [
{
"data3": [
{
"data4": [
{
"tag2": [
"ss"
],
"tag1": [
"fg"
],
"tag3": [
"df"
]
},
{
"tag1": [
"ss"
],
"tag2": [
"df"
],
"tag3": [
"fg"
]
}
]
}
]
}
]
}
]
}
]
}
]
解决方案
实际上,您想要更改对象中条目的顺序,而不是数组中的条目。这是有问题的,因为对象属性本质上是无序的。
Saxon 有一个序列化属性来解决这个问题。如果你的样式表是
<xsl:output method="json" indent="yes" saxon:property-order="tag1 tag2 tag3"/>
<xsl:template name="xsl:initial-template">
<xsl:sequence select="json-doc('my-input.json')"/>
</xsl:template>
那么它应该按照您想要的方式序列化 JSON。
详细信息:https ://saxonica.com/documentation/index.html#!extensions/output-extras/serialization-parameters
注意:要使用此类 Saxon 扩展,您需要 Saxon-PE 或更高版本,这需要商业许可证。
推荐阅读
- python - Pyspark - 规范化数据框
- windows - 如何在安装程序中分发使用 Windows 运行时的 Windows 应用程序?
- python - 从 json 中抓取特定值
- c++ - Eclipse CDT 包含 C/C++ 标准库
- sql - 如何在 jsonb 对象数组上应用过滤器 - 聚合后?
- android - 使用 Retrofit 时响应是 url 编码的
- javascript - React js - onSwipe() 事件后数组不更新
- angular - Angular Drag & Drop:cdkDrag 项拖放到嵌套的 cdkDropLists
- python - Python simple if != or != not working in stings
- css - 根据孩子的身高调整父DIV的高度并设置溢出?就像一个旋转木马,它的高度会随着内容的滚动而调整