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 之前,我在这里检查:
但仅为id:2获取 JSON Eval ,而不是 id:1& 2
答案 0 :(得分:4)
您不能在对象中多次拥有某个属性,并且您拥有"id"
属性的两倍,"album"
和"songs"
两次。
即使它是一个有效的(可解析的)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 :(得分:2)
您有一个顶级对象,每个键id
,album
和songs
都有两个映射。这是无效的 - 对象的键应该是唯一的。
您可能需要顶级作为对象列表
[
{
"id":1,
"album":"127 Hours",
"songs": [
{
"id":1,
"name":"Never Hear Surf Music Again",
"duration":"5:52"
}
]
},
{
"id":2,
.....
或稍微更改表示并使用按相册ID
键入的顶级对象{
"album_1":{
"title":"127 Hours",
"songs": [
{
"id":1,
"name":"Never Hear Surf Music Again",
"duration":"5:52"
}
]
},
"album_2":{
"title":"Adele 21",
....
哪种表示更合适取决于您的用例。对象列表表示允许您以可预测的顺序迭代相册列表,但意味着您需要执行(线性或二进制)搜索以查找具有特定ID的相册。顶级对象表示可让您更轻松地查找单个相册ID的详细信息,但在迭代时您不再保证以相同的顺序获取它们。
答案 2 :(得分: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"
}
}
]
}
答案 3 :(得分: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"
}]
}]
答案 4 :(得分: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"
}]
}]