Я работаю над разбором JSON и поиском определенного ключа в этом объекте JSON. Проблема в том, что структура JSON постоянно меняется, и я не могу жестко закодировать путь, есть ли лучшие способы анализа?
или
могу ли я получить это для преобразования в обычные пары значений ключа JSON, как показано ниже
{
"resourceName": "Bundle",
"id": "6d6e-81d5-5a1e2b452563",
"lastUpdated": "2069-06-21",
"url": "http://abcd.com",
.
.
.
... so on
}
Я пытался использовать жестко закодированные методы, но это не всегда работает
Вот фрагмент JSON
{
"resourceName": "Bundle",
"id": "6d6e-81d5-5a1e2b452563",
"meta": {
"lastUpdated": "2069-06-21"
},
"data1": [{
"url": "http://abcd.com",
"value": {
"url": "http://abcd.com",
"value": [{
"url": "Severity",
"value": "info"
}, {
"url": "dfew",
"value": "fefdd"
}, {
"url": "fwef",
"value": "This is data blah blah"
}]
}
}]
}
Если он постоянно меняется, но вы знаете возможные варианты, вы можете рассмотреть реализацию необязательная цепочка.
@ p.s.w.g Когда их несколько, мне нужно взять первый



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы ищете объект рекурсивно:
function get_lastUpdated(obj)
{
for ( var key in obj )
{
if ( key == "lastUpdated" ) return obj[key];
if ( typeof obj[key] == "object" )
{
var res = get_lastUpdated(obj[key]);
if ( res ) return res;
}
}
return null;
}
Для простого случая может работать что-то вроде выше.
Когда вы вызываете JSON.parse, вы можете передать функцию обратного вызова, называемую reviver, которая будет рекурсивно применяться ко всем парам ключ-значение. Например:
var jsonString = `{
"resourceName": "Bundle",
"id": "6d6e-81d5-5a1e2b452563",
"meta": {
"lastUpdated": "2069-06-21"
},
"data1": [{
"url": "http://abcd.com",
"value": {
"url": "http://abcd.com",
"value": [{
"url": "Severity",
"value": "info"
}, {
"url": "dfew",
"value": "fefdd"
}, {
"url": "fwef",
"value": "This is data blah blah"
}]
}
}]
}`;
var obj = {};
JSON.parse(jsonString, (key, value) => {
if (typeof value === "string" && !(key in obj)) {
obj[key] = value;
}
});
console.info(obj);Если вы уже проанализировали объект, вы можете использовать аналогичную стратегию с JSON.stringify и обратным вызовом replacer:
var data = {
"resourceName": "Bundle",
"id": "6d6e-81d5-5a1e2b452563",
"meta": {
"lastUpdated": "2069-06-21"
},
"data1": [{
"url": "http://abcd.com",
"value": {
"url": "http://abcd.com",
"value": [{
"url": "Severity",
"value": "info"
}, {
"url": "dfew",
"value": "fefdd"
}, {
"url": "fwef",
"value": "This is data blah blah"
}]
}
}]
};
var obj = {};
JSON.stringify(data, (key, value) => {
if (typeof value === "string" && !(key in obj)) {
obj[key] = value;
}
return value;
});
console.info(obj);
Если я правильно понимаю, вы хотите пройти всю структуру и извлечь Только пары ключ-значение, где значение является строкой. А как насчет множественных
urlиvalueключей?