2011-08-11 23 views
10

私はJSONを初めて使用しており、いくつかの可能性を試しています。私が不思議に思ったことの1つ:「JSONオブジェクトの中にJSONオブジェクトを配置する方法はありますか?私はこれを行うことができると仮定したいと思っており、非常に有用かもしれないので可能であると思っていますが、構文上のすべての試みは失敗しています。標準の例を次に示します。JSONオブジェクト.. JSONオブジェクト内

var Person = { 
    name: 'John', 
    age: 21, 
    alive: true, 
    siblings: [ 
     { 
      name: 'Andrew', 
      age: 23, 
      alive: true 
     }, 
     { 
      name: 'Christine', 
      age: 19, 
      alive: true 
     } 
    ] 
} 

ここで、次のような方法がありますか?

var Andrew = { 
    name: 'Andrew', 
    age: 21, 
    alive: true 
} 

var Person = { 
    name: 'John', 
    age: 21, 
    alive: true, 
    siblings: [ 
     { 
      Andrew 
     }, 
     { 
      name: 'Christine', 
      age: 19, 
      alive: true 
     } 
    ]  
} 

もしそうなら、適切な方法は何ですか?それとも簡単にできないのですか?

edit:私が実際に何を意味しているのですか?JSONはオブジェクトを内部に持つオブジェクトをエンコードできますか?

+2

これらはjavascriptスクリプトオブジェクトでJSONではなく、ちょうどfyi – Joe

+0

です。ありがとう! – grep

答えて

8

省略中括弧:

var Person = { 
    name: 'John', 
    age: 21, 
    alive: true, 
    siblings: [ 
     Andrew, 
     { 
      name: 'Christine', 
      age: 19, 
      alive: true 
     } 
    ]  
} 

Andrewは、JavaScriptオブジェクトへの参照です。中括弧の表記-{ foo: 1 }は、オブジェクトのリテラルです。リテラルの代わりに変数を使用するには、中括弧を含むリテラル構文全体を省略します。

いずれもJSONまたは "JSONオブジェクト"ではありません。 JSONは、JavaScript Objectのリテラル構文と一致する文字列です。 JSON文字列が解析されると、それはJavaScriptオブジェクトであり、JSONオブジェクトではありません。 JSONは、new Date()などのオブジェクトをインスタンス化することができない

var Person = { 
    name: "John", 
    birthDate: new Date(1980, 0, 1), 
    speak: function(){ return "hello"; }, 
    siblings: [ 
     Andrew, 
     Christine 
    ]; 
} 

、JSONがメンバーとしての機能を持つことができない、とJSONは、Andrewなどの外部オブジェクトを参照することができない。

たとえば、これは有効なJSON有効なJavaScriptではなく、またはChristine

+0

非常に説明的です、ありがとう – grep

1

純粋なJSONでは、オブジェクトを完全にオブジェクトに埋め込むことができます。という参照をオブジェクトのに埋め込むことはできません。

JavaScriptでJSONを使用している場合は、その周囲に角括弧は必要ありませんが、これは実行可能です。

2

再度ブラケットは必要ありません。配列値の1つとしてAndrewを入れることができます。

siblings: [ 
     Andrew, 
    { 
     name: 'Christine', 
     age: 19, 
     alive: true 
    } 
] 
4

もうすぐです。 Andrewはすでにオブジェクトであるため、オブジェクトのリテラル構文でラップする必要はありません(プロパティ名を値として使用する必要があります)。これはどう:

var Andrew = { 
    name: 'Andrew', 
    age: 21, 
    alive: true 
} 

var Person = { 
    name: 'John', 
    age: 21, 
    alive: true, 
    siblings: [ 
    Andrew, 
    { 
     name: 'Christine', 
     age: 19, 
     alive: true 
    } 
    ]  
} 
3
var Andrew = { 
    name: 'Andrew', 
    age: 21, 
    alive: true 
} 

var Person = { 
    name: 'John', 
    age: 21, 
    alive: true, 
    siblings: [ 
     Andrew, 
     { 
      name: 'Christine', 
      age: 19, 
      alive: true 
     } 
    ]  
} 

すでに括弧がついているので、括弧を削除してください。

Person.siblings[0].name // Andrew 
関連する問題