我只是想知道我是否将JSON推得太远了?如果有人之前打过这个?
我有一个xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<customermodel:Customer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:customermodel="http://customermodel" xmlns:personal="http://customermodel/personal" id="1" age="1" name="Joe">
<bankAccounts xsi:type="customermodel:BankAccount" accountNo="10" bankName="HSBC" testBoolean="true" testDate="2006-10-23" testDateTime="2006-10-23T22:15:01+08:00" testDecimal="20.2" testTime="22:15:01+08:00">
<count>0</count>
<bankAddressLine>HSBC</bankAddressLine>
<bankAddressLine>London</bankAddressLine>
<bankAddressLine>31 florence</bankAddressLine>
<bankAddressLine>Swindon</bankAddressLine>
</bankAccounts>
</customermodel:Customer>
其中包含元素和属性....
当我转换为JSON时,我会:
{"customermodel:Customer":{"id":"1","name":"Joe","age":"1","xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance","bankAccounts":{"testDate":"2006-10-23","testDecimal":"20.2","count":"0","testDateTime":"2006-10-23T22:15:01+08:00","bankAddressLine":["HSBC","London","31 florence","Swindon"],"testBoolean":"true","bankName":"HSBC","accountNo":"10","xsi:type":"customermodel:BankAccount","testTime":"22:15:01+08:00"},"xmlns:personal":"http://customermodel/personal","xmlns:customermodel":"http://customermodel"}}
然后我发送这个客户端..它转换为js对象(或其他)编辑某些值(元素),然后将其发送回服务器。
所以我得到了JSON字符串,并将其转换回XML:
<customermodel:Customer>
<id>1</id>
<age>1</age>
<name>Joe</name>
<xmlns:xsi>http://www.w3.org/2001/XMLSchema-instance</xmlns:xsi>
<bankAccounts>
<testDate>2006-10-23</testDate>
<testDecimal>20.2</testDecimal>
<testDateTime>2006-10-23T22:15:01+08:00</testDateTime>
<count>0</count>
<bankAddressLine>HSBC</bankAddressLine>
<bankAddressLine>London</bankAddressLine>
<bankAddressLine>31 florence</bankAddressLine>
<bankAddressLine>Swindon</bankAddressLine>
<accountNo>10</accountNo>
<bankName>HSBC</bankName>
<testBoolean>true</testBoolean>
<xsi:type>customermodel:BankAccount</xsi:type>
<testTime>22:15:01+08:00</testTime>
</bankAccounts>
<xmlns:personal>http://customermodel/personal</xmlns:personal>
<xmlns:customermodel>http://customermodel</xmlns:customermodel>
</customermodel:Customer>
并且存在问题,似乎不知道元素/属性之间的区别所以我无法检查XSD以检查它现在是否有效?
有解决方法吗?
我不能成为第一个遇到这个问题的人吗?
答案 0 :(得分:9)
JSON作为XML编码没有意义,没有。如果您想使用和操作XML,那么请使用和操作XML。
JSON适用于需要重量更轻,更易于解析,更易于编写和阅读的内容。它有一个相当简单的结构,既不比XML更好也不差,只是不同。它具有列表,关联,字符串和数字,而XML具有嵌套的元素,属性和实体。虽然你可以准确地对每一个进行编码,但你必须问问自己为什么要这样做;如果您希望JSON使用JSON,并且您希望XML使用XML。
答案 1 :(得分:1)
我不会在json字符串中编码xml架构信息 - 这看起来有点倒退。如果您要向他们发送JSON,他们不应该知道这只是JSON。额外的xml将使您的界面混淆并使其看起来“漏洞”。
您甚至可以考虑使用xml并避免使用额外的抽象层。当您知道至少有一方实际使用javascript时,JSON最有意义。如果不是这种情况,它仍然可以像任何其他传输格式一样工作。但是,如果你已经有一个xml表示,那就有点过分了。
另一方面,如果您的客户真正使用javascript,它将使他们更容易使用数据。唯一的问题是回程,一旦它在JSON中,你是否更信任正确转换回xml?你可能更有资格,因为它是你的架构。
答案 2 :(得分:1)
JsonML提供了一个经过深思熟虑的XML&lt; - &gt; JSON标准映射。如果您使用它,您将获得在客户端上寻找的易于操作的好处,而不会损失元素/属性的保真度。
答案 3 :(得分:0)
为此,您需要在序列化/反序列化方法中构建其他逻辑/数据 - 可能会创建类似“属性”和“数据”的东西来保存不同的部分:
{"customermodel:Customer":
{
"attributes": {"xmlns:xsi":"...", "xmlns:customermodel":"..."},
"data":
{
"bankAccounts":
{
"attributes": { ... }
"data" :
{
"count":0,
"bankAddressLine":"..."
}
}
}
}