0

オブジェクトにJSONがありますが、jsonのサンプルの値は次のように返されるようです。

{
"rootLayout":"main",
"layoutDescriptions":[
{
  "id":"main",
  "container" : {
    "type":"Tabs",
    "content":[
      {
        "type":"Panel",
        "label":"Simple Address",
        "layout":"SimpleForm",
        "comment":"This form is simple name value pairs",
        "content":[
          { "type":"label", "constraint":"newline", "text":"Org Name" },
          { "type":"text", "property":"propOne" },
          { "type":"label", "constraint":"newline", "text":"Address" },
          { "type":"text", "property":"addrLine1" },
          { "type":"text", "property":"addrLine2" },
          { "type":"text", "property":"addrLine3" },
          { "type":"label", "constraint":"newline", "text":"Postcode" },
          { "type":"text", "property":"postcode" }
        ]
      },

を使用してrootLayoutを返そうとしています

 obj[0].rootLayout.id

これは機能しません。コンテンツ要素にアクセスする方法も考えています。

私はjsonを初めて使用し、私が思うに深いところに投げ込まれました。私はインターネット上で良い読書を見つけることができません。誰かがいくつかを推薦することができます。

ありがとう。

4

3 に答える 3

12

JSONを理解していないようですので説明

思ったほど複雑ではありません。実際には、JavaScriptオブジェクトをコードで記述されているかのように表現します。

したがって、JSONを次のように記述している場合:

{
    id : 100,
    name: "Yeah baby"
}

これは、オブジェクトに2つのプロパティがあることを意味します:idname。最初のものは数値で、2番目のものは文字列です。

あなたの例では、オブジェクトに2つのプロパティがあることがわかります:rootLayoutlayoutDescriptions。最初のものjsonObj.rootLayoutは文字列であり、戻ります"main"。2番目のものは配列です。

layoutDescriptions: [ {...}, {...},... ]

配列要素は中括弧で囲まれているため、どうやらオブジェクトの配列です。例で提供したこの特定の配列要素オブジェクトには、トップレベルオブジェクトについて説明したのと同じように独自のプロパティがあります:(id文字列)、container(再びカーリーで囲まれているため、別のオブジェクト)など...

JSON表記についてもう少し理解していただければ幸いです。

それではあなたの質問に行きましょう

id次の方法でアクセスできます。

jsonObj.layoutDescriptions[0].id

さらにコンテンツオブジェクトにアクセスします。

var contentObjects = jsonObj.layoutDescriptions[0].container.content[0].content;
for(var i = 0; i < contentObjects.length, i++)
{
    // assign this inner object to a variable for simpler property access
    var contObj = contentObjects[i];

    // do with this object whatever you need to and access properties as
    // contObj.type
    // contObj.property
    // contObj.text
    // contObj.constraint
}

これは最初のコンテンツオブジェクトのコンテンツオブジェクトのみを列挙することに注意してください...これが理にかなっている場合...JSONオブジェクトをよく見ると、オブジェクトのネストされたコンテンツ配列があることがわかります。

于 2012-08-08T09:22:54.017 に答える
2

オブジェクトは配列ではなくオブジェクトであり、。というプロパティはありません0

取得するにはrootLayout

obj.rootLayout

ただし、rootLayoutは文字列であり、オブジェクトではありません。はありませんidlayoutDescriptions配列の最初の項目はそうです。

obj.layoutDescriptions[0].id
于 2012-08-08T09:21:58.053 に答える
1

layoutDescriptionsid等しいのいずれかを取得しようとしていobj.rootLayoutますか?

var targetLayout = {};
for(var i = 0; i < obj.layoutDescriptions.length; i++) {
    if(obj.layoutDescriptions[i].id == obj.rootLayout) {
        targetLayout = obj.layoutDescriptions[i]; break; 
    }
}

console.log(targetLayout);
于 2012-08-08T09:25:56.697 に答える