1

JSON ベースのプロトコルのスキーマを正式に定義したいと考えています。スキーマには次の 2 つの基準があります。 1. ツールを使用してパーサー/シリアライザー (php および .net) を作成できるようにしたい。2. 結果の JSON は人間が読みやすいものにする必要があります

これが文脈です。スキーマはゲーム キャラクターを記述します。例として、プロファイルの 1 つの側面である職業を取り上げます。キャラクターは 2 つまでの職業を持つことができます (10 のリストから)。各職業は名前とレベルによって記述されます。例:

スキニング - レベル 200 鍛冶屋 - レベル 300

基準 1 を満たすには、XSD スキーマ (または JSON スキーマ) を使用してコード ジェネレーターまたはパーサー ライブラリを駆動することが非常に役立ちます。しかし、それは私の JSON が次のように見える必要があることを意味します:

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

しかし、あまりにもおしゃべりな感じがするので、JSON を次のようにしたいと思います (職業がキーとして使用されていることに注意してください)。

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

しかし、後のJSONは職種ごとに要素を定義しないとXSDで記述できません。

だから私は自分の状況の解決策を探しています.ここに私が特定したオプションがあります:

  1. 黙って、JSON XSD フレンドリーにします (上記の最初のスニペット)
  2. 黙ってJSONを人間に優しくし、パーサー/シリアライザーを手作業でコーディングしてください。

しかし、両方の基準を満たすソリューションを見つけたいと思っています。

注: Newton-King の JSON ライブラリを使用すると、職業を Dictionary として解析できることは承知していますが、この JSON をマップする型を手動でコーディングする必要があります。したがって、これまでのところ、オプション 2 に傾いていますが、提案は受け付けています。

4

2 に答える 2

1

職業の名前を名前に変更して、次のようにします。

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

クライアントモデルでシリアル化された後は、次のようになります。

profession = character.professions[0]
profession.name
=> "Skinning"
于 2011-04-13T03:33:15.340 に答える
0

あなたのオプションは、あなたが言ったように... 1 黙ってxmlを使用する 2 黙って独自のものを構築する

または多分 3... http://davidwalsh.name/json-validation

私は #1 を実行します - xml は X => Y フォーマットからのものを変換するためのかなり一般的な方法のようです - 私は JS ではなく C# で作業することを好みます - 多くの人が XML を使用しています。これは受け入れられている標準であり、そこには多くのリソースがあります途中であなたを助けるために

于 2011-04-13T16:09:32.833 に答える