JSON не в правильному форматі

Що невірно у моєму JSON :

{
    "id":1,
    "album":"127 Hours",
    "songs":
        [{
            "id":1,
            "name":"Never Hear Surf Music Again",
            "duration":"5:52"
        }],
    "id":2,
    "album":"Adele 21",
    "songs":
        [{
            "id":1,
            "name":"Rolling In The Deep",
            "duration":"03:48"
        }]
}

перед використанням JSON в моєму додатку, я перевіряю тут:

http://json.parser.online.fr/

but getting JSON Eval for id: 2 only, not for both id: 1 & 2

0
Я пропоную відступити ваш JSON; це робить його набагато простіше читати і вирішувати проблеми. Наприклад, для кожного відкритого кронштейна (будь то { або [], вставте додаткові 4 пробіли. (І, як я пишу, 2 різних користувачів редагують ваш пост, щоб відступити від JSON!)
додано Автор user9876, джерело

9 Відповіді

У об'єкті не можна мати властивості більше одного разу, і ви двічі маєте властивість "id" , двічі "album" і двічі .

Навіть якщо це дійсний (parsable) рядок JSON, він не зберігає те, що ви хочете його зберігати, точніше це не може бути відновлено в об'єкті з усіма цими значеннями властивостей.

Ви повинні зробити це масив об'єктів:

[
    {

        "id":1,
        "album":"127 Hours",
        "songs":[
          {
          "id":1,
          "name":"Never Hear Surf Music Again",
          "duration":"5:52"
          }
        ]
    }, {
        "id":2,
        "album":"Adele 21",
        "songs":[
          {
          "id":1,
          "name":"Rolling In The Deep",
          "duration":"03:48"
          }
        ]
    }
 ]
4
додано
@AbrahimNeil Я думаю, що я зробив. Що ви відсутні?
додано Автор Denys Séguret, джерело

У об'єкті не можна мати властивості більше одного разу, і ви двічі маєте властивість "id" , двічі "album" і двічі .

Навіть якщо це дійсний (parsable) рядок JSON, він не зберігає те, що ви хочете його зберігати, точніше це не може бути відновлено в об'єкті з усіма цими значеннями властивостей.

Ви повинні зробити це масив об'єктів:

[
    {

        "id":1,
        "album":"127 Hours",
        "songs":[
          {
          "id":1,
          "name":"Never Hear Surf Music Again",
          "duration":"5:52"
          }
        ]
    }, {
        "id":2,
        "album":"Adele 21",
        "songs":[
          {
          "id":1,
          "name":"Rolling In The Deep",
          "duration":"03:48"
          }
        ]
    }
 ]
4
додано
@AbrahimNeil Я думаю, що я зробив. Що ви відсутні?
додано Автор Denys Séguret, джерело

У вас є один об'єкт верхнього рівня з двома відображеннями для кожної клавіші id , album і пісень . Це недійсне - ключі об'єкта повинні бути унікальними.

Вам, мабуть, потрібно, щоб верхній рівень був або списком об'єктів

[
    {
        "id":1,
        "album":"127 Hours",
        "songs": [
            {
                "id":1,
                "name":"Never Hear Surf Music Again",
                "duration":"5:52"
            }
        ]
    },
    {
        "id":2,
        .....

або трохи змінити подання та використовувати об'єкт верхнього рівня, набутий за ідентифікатором альбому

{
   "album_1":{
        "title":"127 Hours",
        "songs": [
            {
                "id":1,
                "name":"Never Hear Surf Music Again",
                "duration":"5:52"
            }
        ]
    },
    "album_2":{
        "title":"Adele 21",
         ....

Яке подання є більш відповідним, залежить від вашого випадку використання. Представлення списків об'єктів дає змогу переглядати список альбомів у передбачуваному порядку, але означає, що вам потрібно виконати пошук (лінійний або бінарний) для пошуку альбому з певним ідентифікатором. Представлення об'єкта верхнього рівня дає змогу легше знаходити подробиці для одного ідентифікатора альбому, але вам більше не доведеться отримувати їх у тому ж порядку, коли вони повторюються.

2
додано

У вас є один об'єкт верхнього рівня з двома відображеннями для кожної клавіші id , album і пісень . Це недійсне - ключі об'єкта повинні бути унікальними.

Вам, мабуть, потрібно, щоб верхній рівень був або списком об'єктів

[
    {
        "id":1,
        "album":"127 Hours",
        "songs": [
            {
                "id":1,
                "name":"Never Hear Surf Music Again",
                "duration":"5:52"
            }
        ]
    },
    {
        "id":2,
        .....

або трохи змінити подання та використовувати об'єкт верхнього рівня, набутий за ідентифікатором альбому

{
   "album_1":{
        "title":"127 Hours",
        "songs": [
            {
                "id":1,
                "name":"Never Hear Surf Music Again",
                "duration":"5:52"
            }
        ]
    },
    "album_2":{
        "title":"Adele 21",
         ....

Яке подання є більш відповідним, залежить від вашого випадку використання. Представлення списків об'єктів дає змогу переглядати список альбомів у передбачуваному порядку, але означає, що вам потрібно виконати пошук (лінійний або бінарний) для пошуку альбому з певним ідентифікатором. Представлення об'єкта верхнього рівня дає змогу легше знаходити подробиці для одного ідентифікатора альбому, але вам більше не доведеться отримувати їх у тому ж порядку, коли вони повторюються.

2
додано
{
    "Album list": [
        {
                "id":1,
             "album":"127 Hours",
             "songs":{
    "id":1,
    "name":"Never Hear Surf Music Again",
    "duration":"5:52"
    }
        },
        {
               "id":2,
    "album":"Adele 21",
    "songs":

    {
    "id":1,
    "name":"Rolling In The Deep",
    "duration":"03:48"
    }
        }



    ]
}
2
додано

Я відредагував ваше запитання з належним відступом для вашої JSON. Тепер ви можете легко побачити, що ви маєте дубльовані властивості, зокрема id , album і songs . У дійсному JSON ви не можете мати повторюваних імен властивостей - отже, ваша помилка.

Швидше за все, ви хочете мати масив об'єктів, а не все разом. Я підозрюю, що наступний JSON задовольнить ваші потреби:

[{
    "id":1,
    "album":"127 Hours",
    "songs":
        [{
            "id":1,
            "name":"Never Hear Surf Music Again",
            "duration":"5:52"
        }]
},
{
    "id":2,
    "album":"Adele 21",
    "songs":
        [{
            "id":1,
            "name":"Rolling In The Deep",
            "duration":"03:48"
        }]
}]
1
додано

Я відредагував ваше запитання з належним відступом для вашої JSON. Тепер ви можете легко побачити, що ви маєте дубльовані властивості, зокрема id , album і songs . У дійсному JSON ви не можете мати повторюваних імен властивостей - отже, ваша помилка.

Швидше за все, ви хочете мати масив об'єктів, а не все разом. Я підозрюю, що наступний JSON задовольнить ваші потреби:

[{
    "id":1,
    "album":"127 Hours",
    "songs":
        [{
            "id":1,
            "name":"Never Hear Surf Music Again",
            "duration":"5:52"
        }]
},
{
    "id":2,
    "album":"Adele 21",
    "songs":
        [{
            "id":1,
            "name":"Rolling In The Deep",
            "duration":"03:48"
        }]
}]
1
додано

Я вважаю, що це те, як повинен бути ваш JSON

[{
    "id": 1,
    "album": "127 Hours",
    "songs": [{
        "id": 1,
        "name": "Never Hear Surf Music Again",
        "duration": "5:52"
    }]
}, {
    "id": 2,
    "album": "Adele 21",
    "songs": [{
        "id": 1,
        "name": "Rolling In The Deep",
        "duration": "03:48"
    }]
}]
1
додано

Я вважаю, що це те, як повинен бути ваш JSON

[{
    "id": 1,
    "album": "127 Hours",
    "songs": [{
        "id": 1,
        "name": "Never Hear Surf Music Again",
        "duration": "5:52"
    }]
}, {
    "id": 2,
    "album": "Adele 21",
    "songs": [{
        "id": 1,
        "name": "Rolling In The Deep",
        "duration": "03:48"
    }]
}]
1
додано
ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram