JSON发帖,我推JSON太远了吗?

时间:2009-03-31 14:51:40

标签: json

我只是想知道我是否将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以检查它现在是否有效?

有解决方法吗?

我不能成为第一个遇到这个问题的人吗?

4 个答案:

答案 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":"..."
       }
     }
   }
 }