JSON对象..在JSON对象中

时间:2011-08-11 19:10:50

标签: javascript json object

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

6 个答案:

答案 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无法引用AndrewChristine等外部对象。

答案 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,这是可行的,虽然你不需要它周围的括号。