Объекты JSON .. внутри объектов JSON - PullRequest
11 голосов
/ 11 августа 2011

, поэтому я новичок в 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 кодировать объекты, в которых есть объекты?

Ответы [ 6 ]

11 голосов
/ 11 августа 2011

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

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 не может ссылаться на внешние объекты, такие как Andrew или Christine.

4 голосов
/ 11 августа 2011

Ты рядом. 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 голосов
/ 11 августа 2011
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
3 голосов
/ 11 августа 2011

У вас правильная идея, посмотрите на этот вопрос, он очень похож на ваш.Должен быть принят ответ: Вложенные объекты JSON - нужно ли использовать массивы для всего?

2 голосов
/ 11 августа 2011

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

siblings: [
        Andrew,
    {
        name:  'Christine',
        age:   19,
        alive: true
    }
] 
1 голос
/ 11 августа 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...