2009-03-31 17 views
2

Ich frage mich nur, ob ich JSON zu weit dränge? und wenn jemand das schon einmal getroffen hat?JSON-Posting, treibe ich JSON zu weit?

ich eine XML-Datei haben:

<?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> 

Welche Elemente enthält und Attribute ....

Welche, wenn ich zu JSON konvertieren gibt mir:

{"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"}} 

Also dann senden i Dies ist auch der Client .. der zu einem js-Objekt (oder was auch immer) konvertiert, einige Werte (die Elemente) bearbeitet und sie dann zurück an den Server sendet.

So bekomme ich die JSON-String, und wandeln diese zurück in 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> 

Und es gibt das Problem, ist offenbar nicht den Unterschied zwischen den Elementen wissen/Attribute, so kann ich nicht überprüfen gegen ein XSD, um dies zu überprüfen, ist jetzt gültig?

Gibt es dafür eine Lösung?

Ich kann nicht der Erste sein, der dieses Problem hat?

Antwort

1

JsonML bietet eine durchdachte Standardzuordnung von XML < -> JSON. Wenn Sie es verwenden, erhalten Sie den Vorteil der einfachen Handhabung, die Sie auf dem Client ohne Verlust der Wiedergabetreue in Elementen/Attributen suchen.

1

Ich würde nicht die XML-Schema-Informationen in der JSON-Zeichenfolge codieren - das scheint ein wenig rückwärts. Wenn Sie ihnen JSON senden, sollten sie nicht ahnen, dass dies alles andere als JSON ist. Das zusätzliche XML wird dazu führen, dass es verwirrend wirkt und die Oberfläche "durchlässig" aussieht.

Sie könnten sogar in Betracht ziehen, nur xml zu verwenden und die zusätzliche Abstraktionsebene zu vermeiden. JSON macht am meisten Sinn, wenn Sie wissen, dass mindestens eine Partei Javascript verwendet. Wenn dies nicht der Fall ist, funktioniert es genauso gut wie jedes andere Transportformat. Aber wenn Sie bereits eine XML-Darstellung haben, ist es ein wenig übertrieben.

Auf der anderen Seite, Wenn Ihr Kunde wirklich Javascript verwendet, wird es einfacher für sie, die Daten zu verwenden. Die einzige Sorge ist die Rückreise, und wenn es in JSON ist, wem vertraust du mehr, um die Umwandlung zurück zu XML korrekt zu machen? Sie sind wahrscheinlich besser dafür qualifiziert, da es Ihr Schema ist.

0

Damit dies funktioniert, Sie zusätzliche Logik/Daten in Ihre serialize/unserialize Methoden bauen müßten - wahrscheinlich so etwas wie „Attribute“ und „Daten“ erzeugen die verschiedenen Teile zu halten:

{"customermodel:Customer": 
{ 
    "attributes": {"xmlns:xsi":"...", "xmlns:customermodel":"..."}, 
    "data": 
    { 
    "bankAccounts": 
    { 
     "attributes": { ... } 
     "data" : 
     { 
     "count":0, 
     "bankAddressLine":"..." 
     } 
    } 
    } 
} 
+0

Ich weiß es nicht die beste, und habe darauf hingewiesen .. aber es ist notwendig, Kästchen ankreuzen. Ich denke, ich könnte den Serializer zu asd $ zu Attributnamen erweitern, dann ändern Sie den Serializer (zurück zu xml), um es basierend auf $ = Attribute zu analysieren. – joe90

+0

Welche Form auch immer Sie haben, die Dinge zu beachten sind: 1) Stellen Sie sicher, dass die Kennungen nicht in der XML verwendet werden, 2) testen, testen, testen! :) –

9

JSON tut nicht sinnvoll als XML-Codierung, nein. Wenn Sie mit XML arbeiten und es bearbeiten möchten, arbeiten Sie mit XML und bearbeiten Sie es.

JSON ist für den Fall, dass Sie etwas leichteres, leichter zu parsen und einfacher zu schreiben und zu lesen benötigen. Es hat eine ziemlich einfache Struktur, die weder besser noch schlechter als XML ist, nur anders. Es enthält Listen, Zuordnungen, Zeichenfolgen und Zahlen, während XML verschachtelte Elemente, Attribute und Entitäten enthält. Während Sie jeden genau in den anderen kodieren können, müssen Sie sich fragen, warum Sie das tun; Wenn Sie möchten, dass JSON JSON verwendet und wenn XML XML verwenden soll.

Verwandte Themen