JavaScript JSON按给定键解析而不循环

时间:2013-01-24 15:13:32

标签: javascript json

给出一个JSON字符串:

{
    "__ENTITIES": [
        {
            "__KEY": "196",
            "__STAMP": 1,
            "ID": 196,
            "firstName": "a",
            "middleName": "b",
            "lastName": "c",
            "ContactType": {},
            "addressCollection": {
                "__deferred": {
                    "uri": "/rest/Contact(196)/addressCollection?$expand=addressCollection"
                }
            },
            "__ERROR": [
                {
                    "message": "Cannot save related entity of attribute \"ContactType\" for the entity of datastore class \"Contact\"",
                    "componentSignature": "dbmg",
                    "errCode": 1537
                }
            ]
        }
    ]
}

是否有方法可以获得__ERROR记录,我知道我可以使用 var mydata = json.parse(mydata)然后从mydata对象中找到它。但我希望有一种方法只返回ERROR字段 json.parse(mydata, "__ERROR")并且只获取__ERROR字段中的信息而不将整个JSON字符串转换为对象

3 个答案:

答案 0 :(得分:4)

  

“有没有方法可以获得__ERROR记录,我知道我可以使用var mydata = json.parse(mydata) ...但我希望有... {{1}之类的东西}“

可能有库可以执行此操作,但内置任何内容。您需要编写针对所需数据的代码。

您最接近的将是将复活功能传递给json.parse(mydata, "__ERROR")

JSON.parse

答案 1 :(得分:1)

如果存在这样的功能,无论如何都必须解析整个事情,找到你正在寻找的密钥。

首先解析它,然后获得你想要的密钥:

var mydata = JSON.parse(mydata);
var errorObj = mydata.__ENTITIES[0].__ERROR[0];

如果需要,您可以创建自己的功能:

function parseAndExtract(json, key) {
    var parsed = JSON.parse(json);
    return parsed[key];
}

答案 2 :(得分:1)

  

不将整个json字符串转换为对象

这几乎不可能,你需要某种懒惰的评估,不适合JS。此外,您需要编写自己的解析器,以便比原始JSON.parse慢得多。

  

是否有方法只获取__ERROR记录

不是我知道的。此外,这是一个不寻常的任务,遍历整个对象树,寻找具有该名称的第一个属性。明确更好地访问__ENTITIES[0].__ERROR[0]