所以我是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能够编码内部有对象的对象吗?
答案 0 :(得分:10)
省略花括号:
var Person = {
name: 'John',
age: 21,
alive: true,
siblings: [
Andrew,
{
name: 'Christine',
age: 19,
alive: true
}
]
}
Andrew
是JavaScript对象的引用。大括号表示法 - { foo: 1 }
- 是一个对象 literal 。要使用变量而不是文字,请省略整个文字语法,包括花括号。
请注意,这些都不是JSON或“JSON对象”。 JSON是一个恰好与JavaScript Object文字语法匹配的字符串。解析完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无法引用Andrew
或Christine
等外部对象。
答案 1 :(得分: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
}
]
}
答案 2 :(得分:3)
你有正确的想法,看看这个问题,它与你的问题非常相似。接受的答案应该是您正在寻找的答案:Nested JSON objects - do I have to use arrays for everything?
答案 3 :(得分: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
答案 4 :(得分:2)
你不再需要括号。您可以将Andrew
作为其中一个数组值。
siblings: [
Andrew,
{
name: 'Christine',
age: 19,
alive: true
}
]
答案 5 :(得分:1)
在纯JSON中,您可以将对象嵌入到对象中,而不是引用对象。
如果你在JavaScript中使用JSON,这是可行的,虽然你不需要它周围的括号。