簡體   English   中英

通過給定的鍵進行JavaScript JSON解析而不循環

[英]JavaScript JSON parse by a given key without looping

給定這樣的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字符串轉換為對象

“是否有一種只獲取__ERROR記錄的方法,我知道我可以使用var mydata = json.parse(mydata) ...但是我希望有...類似json.parse(mydata, "__ERROR")

可能有執行此操作的庫,但是沒有內置庫。您需要編寫針對所需數據的代碼。

最接近的是將reviver函數傳遞給JSON.parse

var errors = [];

var mydata = JSON.parse(mydata, function(key, val) {
    if (key === "__ERROR")
        errors.push(val);
    return val
});

如果存在這樣的函數,則無論如何都必須解析整個事物,以找到所需的鍵。

只需先解析它,然后獲取所需的密鑰即可:

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

如果需要,可以創建自己的函數:

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

而不把整個json字符串變成一個對象

這幾乎是不可能的,您需要某種不適用於JS的惰性評估。 另外,您將需要編寫自己的解析器,以使其比本地JSON.parse慢得多。

有沒有一種方法只獲取__ERROR記錄

不,我知道。 同樣,遍歷整個對象樹以查找具有該名稱的第一個屬性是一項不尋常的任務。 更好地顯式訪問__ENTITIES[0].__ERROR[0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM