Объекты 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
        }
    ]    
}

Если да, то каков правильный способ сделать это? Или это просто, не нужно делать?

edit. Я действительно имею в виду: способен ли JSON кодировать объекты, в которых есть объекты внутри них?

Ответ 1

Опустить фигурные скобки:

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.

Например, это действительный 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.

Ответ 2

Ты близко. 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
    }
  ]    
}

Ответ 4

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

Ответ 5

Вам больше не нужны скобки. Вы можете просто положить Andrew в качестве одного из значений массива.

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

Ответ 6

В чистом JSON вы можете вставлять объекты в объекты целиком, а не ссылки на объекты.

Если вы используете JSON в JavaScript, это выполнимо, хотя вам не нужны скобки вокруг него.