Из приведенного ниже примера JSON я хотел бы вернуть значение target.id объекта, где source.id == 'x'.Как найти объект JSON с помощью вложенного выражения?
Итак, где source.id == 'startId' return target.id == '3eecd840-e6a8-423c-a892-7df9646fde5d'.
{
"line":[
{
"type":"link",
"source":{
"id":"startId",
"port":"out"
},
"target":{
"id":"3eecd840-e6a8-423c-a892-7df9646fde5d",
"port":"in"
},
"id":"87d88a26-3a28-4db0-8016-71c1c4665f14"
},
{
"type":"link",
"source":{
"id":"3eecd840-e6a8-423c-a892-7df9646fde5d",
"port":"outYes"
},
"target":{
"id":"49940c02-70f2-4c53-ab50-9cbf96903600",
"port":"in"
},
"id":"9f8c365e-9ca7-440f-a722-c4f340782c0c"
}
]
}
Я пробовал JSONPath, но я не могу выработать выражение для использования. $ .line [*]. source.id дает мне список исходных идентификаторов и $ .line [? (@. source.id == 'startId')] возвращает ошибку.
Я также понимаю, что я мог выполнять итерацию по каждому объекту в коде, но это было бы не очень эффективно, если бы у меня было десятки или сотни «линий» для работы. Если возможно, мне нужен более «прямой» путь к объекту.
Я использую javascript для кодирования остальной части приложения, поэтому примеры javascript будут полезны (с JSONPath или без него).
какой-либо причине вы не можете просто разбора JSON, а затем работать с результирующим графа объектов? (Что не является JSON, это графический объект. JSON - это текстовая нотация.) Из вашего вопроса, похоже, вы работаете с JSON как текст ... –
Несмотря на свое название, JSONPath все еще работает с анализируемый объект, а не строка JSON. Таким образом, он также выполняет итерацию над объектом. –
Да, я начинаю с JSON в виде строки, а затем создаю объект с помощью JSON.parse (x). JSONPath позволяет мне нарезать json вверх, но, похоже, не позволяет мне выбрать значение объекта на основе другого значения объекта, т.е. выберите «target», где «source» = foo –