簡體   English   中英

Javascript-按鍵搜索Json值

[英]Javascript - Search Json Value by Key

由於無法控制的原因,我需要在具有不同結構的JSON中搜索相同的鍵值。

我的代碼能夠找到“ valor”的值,並且無論JSON的結構是什么,始終在其中的某個位置都有供應商密鑰。

到目前為止,我有兩個接收到的JSON示例:

[2,"4:4","ExtraNotification",{"typeModel":"553","serialNumber":"0218-009","vendor":"ABC","version":"4.0.2.14"}]

{"id":"101010c90310","timestamp":"2019-02-18T18:33:35.819925957Z","station":true,"type":"call","action":"ExtraNotification","payload":{"model":"F254A","serialNumber":"1543906","vendor":"EVZ","version":"0.180601","si":"2048188","icid":"89312490184"}}

我試圖對其進行映射,以檢查該屬性是否未定義,沒有任何效果。

您可以通過鍵搜索對象或數組。 如果找到了您要查找的密鑰,請返回它。 否則,遞歸地傳遞沿途找到的所有對象:

 let j = [2,"4:4","ExtraNotification",{"typeModel":"553","serialNumber":"0218-009","vendor":"ABC","version":"4.0.2.14"}] let j2 = {"id":"101010c90310","timestamp":"2019-02-18T18:33:35.819925957Z","station":true,"type":"call","action":"ExtraNotification","payload":{"model":"F254A","serialNumber":"1543906","vendor":"EVZ","version":"0.180601","si":"2048188","icid":"89312490184"}} function findKey(obj, key) { for ([k, v] of Object.entries(obj)){ if (k == key) return v if (typeof v === 'object' && v !== null ){ let found = findKey(v, key) if (found) return found } } } console.log(findKey(j, 'vendor')) console.log(findKey(j2, 'vendor')) 

這將類似於find()並返回通過深度優先搜索找到的第一個匹配項。

我寫了一小段遞歸代碼。 它適用於以下輸入:

var input = [2,"4:4","ExtraNotification",{"typeModel":"553","serialNumber":"0218-009","vendor":"ABC","version":"4.0.2.14"}, [{ "vendor": "111"}, { "vendor": "222"} ]];
//var input = {"id":"101010c90310", "test": { "test1": { "vendor": "aaa" } }, "timestamp":"2019-02-18T18:33:35.819925957Z","station":true,"type":"call","action":"ExtraNotification","payload":{"model":"F254A","serialNumber":"1543906","vendor":"EVZ","version":"0.180601","si":"2048188","icid":"89312490184"}};

var founds = [];
function search(obj) {
    if (obj instanceof Array) {
        for(var i = 0; i < obj.length; i++) {
            search(obj[i]);
        }
    } else {    
        for(var key in obj) {
            if (key == "vendor") {
                founds.push(obj[key]);
            } else if (typeof obj[key] == "object") {
                search(obj[key]);
            }
        }
    }
};
search(input);
console.log(founds);
// First input:  ["ABC", "111", "222"]
// Second input: ["aaa", "EVZ"]

您可以跳過parse (或將其stringify )並在字符串中搜索。 沒什么不好應該發生...

 const json1 = '{"id":"101010c90310","timestamp":"2019-02-18T18:33:35.819925957Z","station":true,"type":"call","action":"ExtraNotification","payload":{"model":"F254A","serialNumber":"1543906","vendor":"EVZ","version":"0.180601","si":"2048188","icid":"89312490184"}}'; const json2 = '[2,"4:4","ExtraNotification",{"typeModel":"553","serialNumber":"0218-009","vendor":"ABC","version":"4.0.2.14"}]'; const regex = /"vendor":"([a-zA-Z0-9]*)"/; console.log(regex.exec(json1)); console.log(regex.exec(json2)); 

暫無
暫無

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

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