Разбор динамического объекта JSON

Я работаю над разбором 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"
            }]
        }
    }]
}

Если я правильно понимаю, вы хотите пройти всю структуру и извлечь Только пары ключ-значение, где значение является строкой. А как насчет множественных url и value ключей?

p.s.w.g 24.04.2019 20:04

Если он постоянно меняется, но вы знаете возможные варианты, вы можете рассмотреть реализацию необязательная цепочка.

Caleb Davenport 24.04.2019 20:06

@ p.s.w.g Когда их несколько, мне нужно взять первый

imar 24.04.2019 20:18
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
56
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы ищете объект рекурсивно:

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);

Другие вопросы по теме