【问题标题】:Apache Axis2 application/json not return a well format json objectApache Axis2 应用程序/json 不返回格式良好的 json 对象
【发布时间】:2018-11-17 05:03:02
【问题描述】:

我在 wso2 企业集成器控制台上部署了一个 API 服务,该服务在 db 上发送请求以进行选择。 它返回层次结构的数据 xml格式:

    <cdcList xmlns="http://ws.apache.org/ns/synapse">
<cdc>
<idCdc xmlns="">2</idCdc>
<idCdcParent xmlns=""/>
<cdcName xmlns="">Roma</cdcName>
<order xmlns="">1</order>
<isUsed xmlns="">false</isUsed>
<cdcList>
<cdc>
<idCdc xmlns="">5</idCdc>
<idCdcParent xmlns="">2</idCdcParent>
<cdcName xmlns="">Progetti</cdcName>
<order xmlns="">2</order>
<isUsed xmlns="">false</isUsed>
<cdcList>
<cdc>
<idCdc xmlns="">17</idCdc>
<idCdcParent xmlns="">5</idCdcParent>
<cdcName xmlns="">testGP</cdcName>
<order xmlns="">1</order>
<isUsed xmlns="">false</isUsed>
<cdcList/>
</cdc>
<cdc>
<idCdc xmlns="">18</idCdc>
<idCdcParent xmlns="">5</idCdcParent>
<cdcName xmlns="">testGPS</cdcName>
<order xmlns="">2</order>
<isUsed xmlns="">false</isUsed>
<cdcList/>
</cdc>
</cdcList>
</cdc>
</cdcList>
</cdc>
<cdc>
<idCdc xmlns="">3</idCdc>
<idCdcParent xmlns=""/>
<cdcName xmlns="">Milano</cdcName>
<order xmlns="">4</order>
<isUsed xmlns="">false</isUsed>
<cdcList>
<cdc>
<idCdc xmlns="">7</idCdc>
<idCdcParent xmlns="">3</idCdcParent>
<cdcName xmlns="">l</cdcName>
<order xmlns="">4</order>
<isUsed xmlns="">false</isUsed>
<cdcList/>
</cdc>
</cdcList>
</cdc>
<cdc>
<idCdc xmlns="">4</idCdc>
<idCdcParent xmlns=""/>
<cdcName xmlns="">Napoli</cdcName>
<order xmlns="">5</order>
<isUsed xmlns="">false</isUsed>
<cdcList>
<cdc>
<idCdc xmlns="">9</idCdc>
<idCdcParent xmlns="">4</idCdcParent>
<cdcName xmlns="">cccc</cdcName>
<order xmlns="">6</order>
<isUsed xmlns="">false</isUsed>
<cdcList/>
</cdc>
</cdcList>
</cdc>
</cdcList>

该服务使用 Apache Axis2 引擎的 application/json 将输出从 xml 转换为 json。 问题是,如果父对象有多个子对象,它工作得很好,但如果只有一个子对象或没有子对象,它不会返回良好的 json 格式输出。 我试图检查 Apache Axis2 引擎的 java 类,以找到它管理 json 数组中括号的位置,但我没有找到解决方案。 这是 API 服务的输出:

{"cdcList":{"cdc":[{"idCdc":2,"idCdcParent":null,"cdcName":"Roma","order":1,"isUsed":false,"cdcList":{"cdc":{"idCdc":5,"idCdcParent":2,"cdcName":"Progetti","order":2,"isUsed":false,"cdcList":{"cdc":[{"idCdc":17,"idCdcParent":5,"cdcName":"testGP","order":1,"isUsed":false,"cdcList":null},{"idCdc":18,"idCdcParent":5,"cdcName":"testGPS","order":2,"isUsed":false,"cdcList":null}]}}}},{"idCdc":3,"idCdcParent":null,"cdcName":"Milano","order":4,"isUsed":false,"cdcList":{"cdc":{"idCdc":7,"idCdcParent":3,"cdcName":"l","order":4,"isUsed":false,"cdcList":null}}},{"idCdc":4,"idCdcParent":null,"cdcName":"Napoli","order":5,"isUsed":false,"cdcList":{"cdc":{"idCdc":9,"idCdcParent":4,"cdcName":"cccc","order":6,"isUsed":false,"cdcList":null}}}]}}

这就是我想要的样子:

{
"cdcList": [{
        "idCdc": 2,
        "idCdcParent": null,
        "cdcName": "Roma",
        "order": 1,
        "isUsed": false,
        "cdcList": [{
            "idCdc": 5,
            "idCdcParent": 2,
            "cdcName": "Progetti",
            "order": 2,
            "isUsed": false,
            "cdcList": [{
                    "idCdc": 17,
                    "idCdcParent": 5,
                    "cdcName": "testGP",
                    "order": 1,
                    "isUsed": false,
                    "cdcList": null
                },
                {
                    "idCdc": 18,
                    "idCdcParent": 5,
                    "cdcName": "testGPS",
                    "order": 2,
                    "isUsed": false,
                    "cdcList": null
                }
            ]



        }]
    },
    {
        "idCdc": 3,
        "idCdcParent": null,
        "cdcName": "Milano",
        "order": 4,
        "isUsed": false,
        "cdcList": [{

            "idCdc": 7,
            "idCdcParent": 3,
            "cdcName": "l",
            "order": 4,
            "isUsed": false,
            "cdcList": null
        }]
    },
    {
        "idCdc": 4,
        "idCdcParent": null,
        "cdcName": "Napoli",
        "order": 5,
        "isUsed": false,
        "cdcList": [{

            "idCdc": 9,
            "idCdcParent": 4,
            "cdcName": "cccc",
            "order": 6,
            "isUsed": false,
            "cdcList": null
        }]
    }
]

}

注意括号和缺少“cdc”项目。 谢谢。

【问题讨论】:

    标签: json xml apache axis2 hierarchical-data


    【解决方案1】:

    您可能知道,问题在于 XML 到 JSON 转换器无法判断单个 XML 元素是否是有意的并且应该转换为 JSON 对象,或者它是一个列表并且应该将对象包装在列表中。

    最简单的方法是使用 XSLT 转换在每个 cdcList 元素之前添加 xml-multiple 处理指令。

    您希望 XML 在转换为 JSON 之前看起来像这样

    <?xml-multiple cdcList?>
    <cdcList xmlns="http://ws.apache.org/ns/synapse">
        <cdc>
            <idCdc xmlns="">2</idCdc>
            <idCdcParent xmlns=""/>
            <cdcName xmlns="">Roma</cdcName>
            <order xmlns="">1</order>
            <isUsed xmlns="">false</isUsed>
            <?xml-multiple cdcList?>
            <cdcList>
                <cdc>
                    <idCdc xmlns="">5</idCdc>
                    <idCdcParent xmlns="">2</idCdcParent>
                    <cdcName xmlns="">Progetti</cdcName>
                    <order xmlns="">2</order>
                    <isUsed xmlns="">false</isUsed>
                    <?xml-multiple cdcList?>
                    <cdcList>
                        <cdc>
                            <idCdc xmlns="">17</idCdc>
                            <idCdcParent xmlns="">5</idCdcParent>
                            ... etc
    

    【讨论】:

      猜你喜欢
      • 2013-01-17
      • 2020-05-19
      • 2013-12-02
      • 2020-07-07
      • 1970-01-01
      • 2011-05-10
      • 2017-11-19
      • 1970-01-01
      • 2019-06-07
      相关资源
      最近更新 更多