2017-04-07 86 views
0

我试图将现有的JSON结构升级到更复杂的结构。制作JSON字符串的麻烦

最初的想法是一堆X的动物,每一个具有一堆caracteristics的:

  • 动物
    • 动物1
      • 爪:4只
      • 眼睛:2
    • 动物2
      • 爪:0
      • 眼睛:6

的JSON是这样的:

{ 
    "animals":[ 
     {"claws":"4", "eyes":"2"}, 
     {"claws":"0", "eyes":"6"}, 
     etc. 
    ] 
} 

因此,作为你可以看到,我没有列出每个动物的名称,动物的特征是这个数组的一个元素。我可以像动物一样在循环中使用它们[x]。爪


现在我想添加一个巢每一个动物,如:

  • 动物
    • 动物1
        • 眼睛:2
        • 耳朵:2
        • 爪:4
        • 尾巴:1
        • 腿:4
    • 动物2
        • 眼睛:6
        • 耳朵:0
        • 爪:0
        • 尾巴:0
        • 腿:8

,但我没能做到这一点不点名每个动物对象(名称相同的“动物”),并使用数组的什么动物:

{ 
    "animals":[ 
     {"animal":[ 
      {"head": 
       {"eyes":"2", "ears":"2"} 
      }, 
      {"body": 
       {"claws":"4", "tails":"1", "legs":"4"} 
      } 
     ]}, 
     {"animal":[ 
      {"head": 
       {"eyes":"6", "ears":"0"} 
      }, 
      {"body": 
       {"claws":"0", "tails":"0", "legs":"8"} 
      } 
     ]} 
    ] 
} 

我发现它苏茨基因为:

1)我并不需要为每个动物的结构(尤其是因为它们都被命名为“动物”),因为我想对他们重复像之前数组名称;

2),因为我知道电话号码和元素的名字,我不需要为的数组。

我希望我可以使用类似的东西,但它不工作:

{ 
    "animals":[ 
     { 
      {"head": 
       {"eyes":"2", "ears":"2"} 
      }, 
      {"body": 
       {"claws":"4", "tails":"1", "legs":"4"} 
      } 
     }, 
     { 
      {"head": 
       {"eyes":"6", "ears":"0"} 
      }, 
      {"body": 
       {"claws":"0", "tails":"0", "legs":"8"} 
      } 
     } 
    ] 
} 

那么,有没有使用数组和名称嵌套的方式吗?

+2

'{ “动物”:[{ “头”:{ “眼睛”: “2”, “耳朵”:“2”,“身体”:{“爪”:“4”,“尾巴”:“1”,“腿”:“4”}},{“头”:{“eyes” “6”,“ear”:“0”},“body”:{“claws”:“0”,“tails”:“0”,“legs”:“8”}}]}'? – Larme

回答

1

当然有!哈希是键值对,这就是为什么你需要一把钥匙,当您使用{}。阵列是一个简单的集合。所以{}不能是一个简单的收集(这就是为什么你必须使用,而后者没有工作,因为{}在你的例子是一个简单的集合,看看:{ {}, {}, {} ... },所以在这种情况下,必须是[ {}, {}, {} ... ]),但你可以把它简单,只是不鸟巢很多次了:

{ 
    "animals":[ 
     { 
      "head": { 
       "eyes":"2", 
       "ears":"2" 
      }, 
      "body": { 
       "claws":"4", 
       "tails":"1", 
       "legs":"4" 
      } 
     }, 
     # ... 
    ] 
} 
+0

感谢你和Larme。我甚至没有意识到* head *和* body *是键,以下弯曲的大括号元素是值... JSON是我最大的敌人。谢了哥们。 – Destal

+0

@SimonDéchamps没问题! –