2011-08-11 202 views
10

所以我是JSON的新手,并且一直在尝试一些可能性。我想知道的一件事:有没有办法将'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 
     } 
    ]  
} 

如果是这样,那么做到这一点的正确方法是什么?或者可以简单地说,没有做到?

编辑:我真正的意思是: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对象字面值语法的字符串。一旦JSON字符串被解析,它就是一个JavaScript对象,而不是JSON对象。

例如,这是有效的JavaScript,但不是有效的JSON:

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

JSON不能实例对象,如new Date(),JSON不能具有作为一个部件,和JSON不能引用的外部对象如AndrewChristine

+0

非常具有描述性,谢谢 – grep

1

在纯JSON中,您可以将物体嵌入物体中,不是引用的物体。

如果你在JavaScript中使用JSON,这是可行的,尽管你不需要它的括号。

2

你不需要再次括号。您可以将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