#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.get3. Спасибо за ответ. 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