我正在读取第三方的JSON响应,并且发现只有一个对象要返回并且该属性有多个对象时,某些属性才会以单个对象的符号形式返回该值作为对象数组返回。
响应中单个对象的示例
{
"data": {
"property1":"value",
"property2":"value",
"property3":"value"
}
}
响应中的对象数组示例
{
"data": [
{
"property1":"value",
"property2":"value",
"property3":"value"
},
{
"property1":"value",
"property2":"value",
"property3":"value"
},
{
"property1":"value",
"property2":"value",
"property3":"value"
},
{
"property1":"value",
"property2":"value",
"property3":"value"
}
]
}
为什么从同一端点接受两种不同的响应格式?
答案 0 :(得分:1)
每当我看到它发生时,这个问题也困扰着我。我从来没有真正喜欢过必须检查该值才能知道如何访问它。
有人可能会说这样做可以节省有效负载中的一些空间。当只有一个值时,可以节省两个字节,省去[]
。但是恕我直言,它的功能薄弱,众所周知,处理数据更加困难。
但是以另一种方式看待它,这似乎是有道理的:它针对最常见的结果(单个值)进行了优化。在结构非常严格的情况下,我看到了相当一部分数据格式。例如,类似递归字典的结构,其中任何包含对象的属性必须都是该对象的数组。因此,在深度嵌套的对象中,访问值可能看起来像这样:
root.data[0].aparent[0].thechild[0].myvalue
vs:
root.data.aparent.thechild.myvalue
如果实际上有多个值,则使用数组是合适的。
我不一定要买这个,因为您仍然必须进行检查,您必须在使用数据之前进行一些测试(例如,如果没有返回响应)。在具有某种形式的模式匹配的语言中,这种类型的响应可能更有意义。