首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Apache应用程序/ json未返回格式良好的Axis2对象

Apache应用程序/ json未返回格式良好的Axis2对象
EN

Stack Overflow用户
提问于 2018-06-07 18:08:14
回答 1查看 137关注 0票数 0

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

代码语言:javascript
复制
    <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 / json将输出从xml转换为json。问题是,如果父对象有多个子对象,那么它可以很好地工作,但是如果只有一个子对象或没有一个子对象,它就不会返回良好的json格式输出。我试着检查Apache Axis2引擎的java类,看看它在哪里管理json数组中的括号,但我没有找到解决方案。这是API服务的输出:

代码语言:javascript
复制
{"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}}}]}}

这就是我想要的样子:

代码语言:javascript
复制
{
"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“项。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-06-08 04:40:06

正如您可能知道的,问题是XML到JSON转换器无法判断单个XML元素是有意的,应该转换为JSON对象,还是包含一个元素的列表,应该将对象包装在列表中。

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

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

代码语言:javascript
复制
<?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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50738544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档