JSON物业名称最佳实践

时间:2010-01-14 16:48:51

标签: json

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

思想?

2 个答案:

答案 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;
    }
}