Публикация JSON, я слишком далеко продвигаю JSON? - PullRequest
2 голосов
/ 31 марта 2009

Мне просто интересно, слишком ли я продвигаю 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 ]

9 голосов
/ 31 марта 2009

JSON не имеет смысла как кодировка XML, нет. Если вы хотите работать с XML и манипулировать им, то работайте с XML и манипулируйте им.

JSON предназначен для случаев, когда вам нужно что-то более легкое, более простое для разбора и легче для записи и чтения. У него довольно простая структура, которая не лучше и не хуже XML, просто другая. Он имеет списки, ассоциации, строки и числа, в то время как XML имеет вложенные элементы, атрибуты и сущности. В то время как вы могли бы точно закодировать каждое в другом, вы должны спросить себя, почему вы это делаете; если вы хотите, чтобы JSON использовал JSON, и если вы хотите, чтобы XML использовал XML.

1 голос
/ 03 апреля 2010

JsonML обеспечивает хорошо продуманное стандартное отображение из XML <-> JSON. Если вы воспользуетесь им, вы получите преимущество простоты манипуляции, которое вы ищете на клиенте, без потери точности элементов / атрибутов.

1 голос
/ 31 марта 2009

Я бы не стал кодировать информацию о XML-схеме в строке json - это выглядит немного задом наперед. Если вы собираетесь отправить им JSON, у них не должно быть никаких подозрений, что это не что иное, как JSON. Дополнительный XML-код может запутать и сделать ваш интерфейс "утечкой".

Вы можете даже рассмотреть возможность использования xml и избежать дополнительного уровня абстракции. JSON имеет смысл, когда вы знаете, что хотя бы одна сторона на самом деле использует javascript. Если это не так, он все равно будет работать так же, как и любой другой транспортный формат. Но если у вас уже есть xml-представление, оно немного излишне.

С другой стороны, , если ваш клиент действительно использует javascript, ему будет проще использовать данные. Единственная проблема - это обратная поездка, и как только вы окажетесь в JSON, кому вы доверяете больше, чтобы правильно выполнить преобразование обратно в xml? Вы, вероятно, более квалифицированы для этого, так как это ваша схема.

0 голосов
/ 31 марта 2009

Чтобы это работало, вам нужно будет встроить дополнительную логику / данные в ваши методы сериализации / десериализации - возможно, создать что-то вроде «атрибутов» и «данных» для хранения различных частей:

{"customermodel:Customer":
 { 
   "attributes": {"xmlns:xsi":"...", "xmlns:customermodel":"..."},
   "data":
   {
     "bankAccounts":
     {
       "attributes": { ... }
       "data" : 
       {
         "count":0,
         "bankAddressLine":"..."
       }
     }
   }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...