首页 > 解决方案 > 使用 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"
                                                ]
                                            }
                                        ]
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    }
]

标签: jsonxslt

解决方案


实际上,您想要更改对象中条目的顺序,而不是数组中的条目。这是有问题的,因为对象属性本质上是无序的。

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 或更高版本,这需要商业许可证。


推荐阅读