Как применить запрос jsonpath для получения объекта? - PullRequest
0 голосов
/ 28 апреля 2020

Вопрос в том, у меня есть приложение node js code '. js'


var fire = require('jsonpath')
let Config = JSON.parse(fs.readFileSync('./config.json', 'utf-8'))

var obj = {
    "key1" : "val1",
    "key2" : "val2",
    "key3" : "val3",
    "key4" : "val4",
    "key5" : "val5"
}

console.log(fire.query(obj, ?))

и конфиг. json file

{
    "result" : {
        "key1" : "$.key1",
        "key2" : "$.key2"
    }
}

Итак отсюда я хотел бы получить ключ result из файла config.json, используя jsonpath query, где объект, над которым я хотел бы работать, obj, упомянутый в app.js

, и вывод I я ищу

{
    "key1" : "val1",
    "key2" : "val2"
}

Я не хочу получать этот объект, просматривая отдельный запрос для каждого ключа, например, получить ключ1, я мог бы написать result['key1'] = fire.query(obj, '$.key1')

Вместо этого я бы как запросить в одной строке, чтобы получить полный объект результата.

Это то, что я пробовал до сих пор.

1 Ответ

0 голосов
/ 28 апреля 2020

У вас есть конфигурация, которая имеет много ключей, и каждый ключ имеет значение, представляющее путь к значению внутри объекта. Итак, первое, что вам нужно сделать, это перебрать каждую из пар ключ / значение в объекте конфигурации результатов. Для каждого из них вам нужно вызвать функцию jsonpath, используя значение этой пары. Я предполагаю, что ключ пары будет представлять ключ в результате, а значение результата будет тем, что возвращает jsonpath.

// Given 'obj' and 'Config' exist...
const result = Object.entries(Config.result)
  .reduce((resultObj, [key, value]) => (
    { ...resultObj, [key]: fire.query(obj, value) }
  ), {})

console.log(JSON.stringify(result, undefined, 2))
...