![](/img/trans.png)
[英]Javascript | Search in an array of JSON by JSONs specific key value
[英]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.