JSON对象:嵌套JSON对象

18

我是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能够编码具有内部对象的对象吗?


3
这些是 JavaScript 的脚本对象,而不是 JSON 格式的,只是提供信息。 - Joe
是的,需要用更好的措辞。谢谢! - grep
5个回答

15
省略花括号:
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


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

2
您不需要再加括号了。您可以将Andrew作为数组值之一。
siblings: [
        Andrew,
    {
        name:  'Christine',
        age:   19,
        alive: true
    }
] 

1

在纯JSON中,你可以嵌套对象,但不能嵌套对象的引用

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接