无法制作JSON字符串

时间:2017-04-07 09:36:30

标签: json

我正在尝试将现有的JSON结构升级为更复杂的结构。

最初的想法是一堆X 动物,每个都有一堆特征:

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

JSON是这样的:

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

正如你所看到的,我没有命名每个动物对象,动物的特征是数组的一个元素。我可以在像 animals [x] .claws

这样的循环中使用它们

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

  • 动物
    • 动物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)我不需要 head body 的数组,因为我知道元素的数量和名称。

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

{
    "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"}
            }  
        }
    ]
}

那么有没有使用数组和名称进行嵌套的方法呢?

1 个答案:

答案 0 :(得分:1)

当然有!哈希是键值对,这就是您在使用{}时需要密钥的原因。 Array是一个简单的集合。因此{}不能成为简单集合(这就是为什么你必须使用密钥,而后者没有'是的,因为你的示例中的{}是一个简单的集合,看起来是{ {}, {}, {} ... },所以在这种情况下它必须是[ {}, {}, {} ... ]),但你可以让它更简单,只需要#&# 39; t多次嵌套:

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