将GUID用作属性名称是“最佳做法”吗? (参见下面的示例JSON)
{
"ErrorType": 0,
"I9e4f0477549111d997e0acd5cbb90d3f": {
"statusCode": "0",
"guid": "I9e4f0477549111d997e0acd5cbb90d3f",
"moreProperties": "more values"
},
"N51D209F0505711DEA52DFAD621371B7C": {
"statusCode": "0",
"guid": "N51D209F0505711DEA52DFAD621371B7C",
"moreProperties": "more values"
}
}
我会假设不,因为现在不是JSON的整个“对象”部分消失了吗?您无法再访问命名空间,因为属性名称是随机的。序列化(使用JSON.NET)不再是单行。
此外还有重复的数据。 GUID是属性的名称,在该属性中是另一个具有属性名称“guid”的对象。数据规范化没有被考虑。
我不是在写这个JSON而只是消耗它。如果我正在编写这个JSON,我会将其重写为:
{
"ErrorType": 0,
"guids": [
{
"statusCode": "0",
"guid": "I9e4f0477549111d997e0acd5cbb90d3f",
"moreProperties": "more values"
},
{
"statusCode": "0",
"guid": "N51D209F0505711DEA52DFAD621371B7C",
"moreProperties": "more values"
}
]
}
思想?
答案 0 :(得分:1)
如果您在Javascript中通过GUID搜索对象,那么使用GUID作为键肯定会更好,允许您编写obj[someGuid]
。
否则,取决于环境和用途;请提供更多详情。
答案 1 :(得分:1)
正如SLaks所指出的,这取决于您尝试使用JSON的方式。给出:
allObjects = {
"ErrorType": 0,
"I9e4f0477549111d997e0acd5cbb90d3f": {
"statusCode": "0",
"guid": "I9e4f0477549111d997e0acd5cbb90d3f",
"moreProperties": "more values"
},
"N51D209F0505711DEA52DFAD621371B7C": {
"statusCode": "0",
"guid": "N51D209F0505711DEA52DFAD621371B7C",
"moreProperties": "more values"
}
}
myguid = "N51D209F0505711DEA52DFAD621371B7C";
您只需访问allObjects[myguid]["moreProperties"]
等数据即可。如果您按照建议生成JSON(没有guid作为键)并且必须提取与特定guid相关的值,那么您将被迫迭代数组项并检查guid,例如
for (var subObj in allObjects) {
if (subObj['guid'] = myguid) {
// you found it, store it and...
break;
}
}