Как написать вложенный многомерный json-объект

Я изучаю json, и мне было интересно, правильно ли это написать многомерный json-объект, который является вложенным. Я написал:

var foo = {
    "logged_in":true,
    "town":"Dublin",
    "state":"Ohio",
    "country":"USA",
    "products":2,
    "0":{
        "pic_id":"1500",
        "description":"Picture of a computer",
        "localion":"img.cloudimages.us/2012/06/02/computer.jpg",
        "type":"jpg",
        "childrenimages":2

        "0":{
        "pic_id":"15011",
        "description":"Picture of a cpu",
        "localion":"img.cloudimages.us/2012/06/02/mycpu.png",
        "type":"png"
          }
        "1":{
        "pic_id":"15012",
        "description":"Picture of a cpu two",
        "localion":"img.cloudimages.us/2012/06/02/thiscpu.png",
        "type":"png"
          }
    },
    "1":{
        "pic_id":"1501",
        "description":"Picture of a cpu",
        "localion":"img.cloudimages.us/2012/06/02/cpu.png",
        "type":"png"
    }
};

Является ли это правильным или существует соглашение, которому я должен следовать, если мой объект становится слишком глубоко вложенным.

Ответы

Ответ 1

Рассмотрим использование массивов вместо нумерованного объекта.

Массивы в json определяются с помощью [] http://www.json.org/

Вот пример:

var foo = {
    "logged_in":true,
    "town":"Dublin",
    "state":"Ohio",
    "country":"USA",
    "products":
    [
        {
            "pic_id":"1500",
            "description":"Picture of a computer",
            "localion":"img.cloudimages.us/2012/06/02/computer.jpg",
            "type":"jpg",
            "childrenimages":
            [
                {
                    "pic_id":"15011",
                    "description":"Picture of a cpu",
                    "localion":"img.cloudimages.us/2012/06/02/mycpu.png",
                    "type":"png"
                },
                {
                    "pic_id":"15012",
                    "description":"Picture of a cpu two",
                    "localion":"img.cloudimages.us/2012/06/02/thiscpu.png",
                    "type":"png"
                }
            ]
        },
        {
            "pic_id":"1501",
            "description":"Picture of a cpu",
            "localion":"img.cloudimages.us/2012/06/02/cpu.png",
            "type":"png"
        }
    ],
};

(Простите меня, если я забыл либо закрыть {или [или, его довольно сложно ввести код в SO: p)

Таким образом, вам даже не нужно иметь такие значения, как

"products":2,

или

"childrenimages":2

Вы просто делаете

foo.products.length

или

foo.products[0].childrenimages.length

Удачи:)

Ответ 2

Вот правильный формат для ваших данных (обратите внимание, что я изменил некоторые данные)

{
    "logged_in":true,
    "town":"Dublin",
    "state":"Ohio",
    "country":"USA",
    "products":2,
    "productinfo":[
        {
            "0":{
                "pic_id":"1500",
                "description":"Picture of a computer",
                "localion":"img.cloudimages.us/2012/06/02/computer.jpg",
                "type":"jpg",
                "childrenimages":2
            },
            "1":{
                "pic_id":"15011",
                "description":"Picture of a cpu",
                "localion":"img.cloudimages.us/2012/06/02/mycpu.png",
                "type":"png"
            },
            "2":{
                "pic_id":"15012",
                "description":"Picture of a cpu two",
                "localion":"img.cloudimages.us/2012/06/02/thiscpu.png",
                "type":"png"
            },
            "3":{
                "pic_id":"1501",
                "description":"Picture of a cpu",
                "localion":"img.cloudimages.us/2012/06/02/cpu.png",
                "type":"png"
            }
        }
    ]
}

Ответ 3

Это не тот массив, который у вас есть, это только объект, содержащий свойства, которые также являются объектами. Вам также не хватает нескольких запятых, поэтому это даже не будет компилироваться.

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

 var this_json_string = {
    "state":"Ohio",
    "country":"USA",
    "products":[
        {
          "pic_id":"1500",
          "description":"Picture of a computer",
        },

        {
          "pic_id":"15011",
          "description":"Picture of a cpu"
        },
        {
          "pic_id":"15012",
          "description":"Picture of a cpu two"
        },
        {
          "pic_id":"1501",
          "description":"Picture of a cpu"
        }
    ]
};

Ответ 4

Не пишите JSON. Серьезно, кроме простых файлов конфигурации, не пишите JSON.

У вас есть утилиты для преобразования объектов в строку JSON на большинстве языков (если они не указаны).

PHP: json_encode($array);

Javascript: JSON.stringify( obj );

Etc.

Запись JSON вручную часто приводит к ошибкам синтаксиса. Вид, который дает вам головные боли, пока вы не увидите, что отсутствует запятая или нет. У вас есть хорошие инструменты для этого, используйте их. Вы можете сравнить с XML, но у JSON нет инструмента (IDE, текстовый редактор), говорящего "Этот синтаксис неправильный", пока вы его печатаете. Например, ни один редактор не скажет вам, что вы использовали одну цитату вместо двойной.

Просто не пишите JSON.