Обрабатывать json в узле js

#javascript #node.js #json #node-modules

#javascript #node.js #json #узлы-модули

Вопрос:

Я пишу функцию в узле js, которая принимает 2 параметра — «param1» — это «jsonObj», а «param2» — это «xpath» (в виде строки), но когда я пытаюсь извлечь значение с помощью jsonObj.xpath, я получаю результат как неопределенный, поскольку он ищет xpath в качестве ключав объекте json, а не в cDel.dInfo.env. Может кто-нибудь, пожалуйста, дайте мне знать, как извлечь значение cDel.dInfo.env из jsonObj.

Ниже приведен пример кода —

 const json = '{ "cDel": { "dInfo": { "env": "ACCEPTANCE", "ref": 103163 } } }';
const obj = JSON.parse(json);

var getValue = (jsonObj,xpath) => {
       return jsonObj.xpath;
}

console.log(getValue(obj,"cDel.dInfo.env"));
 

Вывод не определен.
Ожидаемый результат — ПРИНЯТИЕ.

Ответ №1:

Вы можете использовать Lodash’s get()

 var object = { 'a': [{ 'b': { 'c': 3 } }] };
 
_.get(object, 'a[0].b.c');
// => 3
 
_.get(object, ['a', '0', 'b', 'c']);
// => 3
 
_.get(object, 'a.b.c', 'default');
// => 'default'
 

Комментарии:

1. Я бы также рекомендовал Lodash, а не изобретать велосипед, если вы его еще не используете.

2. Если вам нужен только get из Lodash, используйте npmjs.com/package/lodash.get

3. Спасибо за ответ. Lodash отлично работал для меня.

Ответ №2:

Это не так, как это работает. Каждое свойство из xpath должно быть прочитано отдельно. Что-то вроде:

 const obj = JSON.parse('{ "cDel": { "dInfo": { "env": "ACCEPTANCE", "ref": 103163 } } }');
const getValue = (jsonObj, xpath) => {
  const path = xpath.split(".");
  let value = jsonObj;
  
  while (path.length) {
    value = value[path.shift()];
  }
  return value;
}

console.log(`obj.cDel.dInfo.env => ${getValue(obj, "cDel.dInfo.env")}`); 

Комментарии:

1. Спасибо за ответ. Приведенный выше код будет отлично работать для json без массива. Поскольку я хочу написать универсальную функцию, я думаю, что Lodash удовлетворяет моим требованиям.

2. В вашем вопросе не упоминался массив внутри json