2011-04-13 3 views
1

Je veux définir formellement un schéma pour un protocole basé sur JSON. J'ai deux critères pour le schéma: 1. Je veux être en mesure d'utiliser des outils pour créer parser/sérialiseur (php et .net). 2. Résultat JSON doit être facile à lire humaineschéma JSON: permet de stocker des informations dans les clés

est ici le contexte. Le schéma décrira un personnage de jeu, à titre d'exemple, je vais prendre un aspect du profil - professions. Un personnage peut avoir jusqu'à 2 professions (dans une liste de 10), chaque profession est décrite par un nom et un niveau, par exemple:

dépecer - niveau 200 Forgeron - niveau 300

Pour satisfaire au critère # 1 ça aide vraiment d'avoir un schéma XSD (ou un schéma JSON) pour générer un générateur de code ou une librairie de parseurs. Mais cela signifie que mon JSON doit ressembler à:

character : { 
    professions : [ 
     { profession : "Skinning", level : 525 } 
     { profession : "Blacksmith", level : 745 } 
    ] 
} 

mais il se sent trop bavard, je préférerais avoir regarder JSON comme (notez que la profession est utilisé comme une clé):

character { 
    professions : { 
     "Skinning" : 525, 
     "Blacksmith" : 745 
    } 
} 

mais le dernier JSON ne peut pas être décrit avec XSD sans avoir à définir un élément pour chaque profession.

Je suis à la recherche d'une solution pour ma situation, voici les options que j'ai identifiés:

  1. taire et faire JSON XSD-friendly (premier extrait ci-dessus)
  2. taire et faire l'homme JSON -friendly et coder à la main l'analyseur/sérialiseur.

mais j'aimerais vraiment trouver une solution qui satisferait aux deux critères.

Note: Je suis conscient que la librairie JSON de Newton-King me permettrait d'analyser des professions en tant que dictionnaire - mais il faudrait que je code manuellement le type pour mapper ce JSON. Donc, jusqu'à présent, je me penche vers l'option # 2, mais je suis ouvert aux suggestions.

Répondre

1

profession Renommer pour nom il serait comme:

character : { 
    professions : [ 
     { name : "Skinning", level : 525 } 
     { name : "Blacksmith", level : 745 } 
    ] 
} 

Puis, après il est publié en feuilleton sur le modèle client serait comme ceci:

profession = character.professions[0] 
profession.name 
=> "Skinning" 
0

Vos options sont, comme vous le dites. .. 1 fermé et l'utilisation xml 2 taire et construire votre propre

ou peut-être 3 ... http://davidwalsh.name/json-validation

Je ferais # 1 - parce que XML semble être une façon assez commune pour transformer des trucs de X => formats Y - Je préfère travailler en C# pas JS - beaucoup de gens utilisent XML, son une norme acceptée , il existe de nombreuses ressources pour vous aider le long du chemin

Questions connexes