У меня есть структуру JSON, который является вложенным родитель/ребенок вида структуры:JSONPath выражения: получение значения определенного атрибута, основанное на его присутствие или значение другого атрибута
{
"type": "site",
"profile_id": "site profile id",
"children": [
{
"type": "dealer",
"profile_id": "dealer profile id",
"children": [
{
"type": "location",
"profile_id": "location profile id",
"children": [
{
"type": "customer",
"profile_id": "customer profile id",
"children": [
{
"type": "farm",
"farm_id": "farm id",
"children": [
{
"type": "field",
"field_id": "field id"
}]}]}]}]}]}
Есть ли способ в JSONPath выполнить одно из следующих действий:
дать мне profile_id, если он присутствует, или дайте мне farm_id если он присутствует, или дайте мне FIELD_ID, если он присутствует.
дать мне profile_id если тип = клиент, или дайте мне farm_id, если тип = ферму, или дайте мне FIELD_ID если тип = поле
дать мне п-й атрибут из каждого класса. Идентификатор фактически является третьим атрибутом в каждом классе. Это мой наименее любимый вариант, потому что я не знаю, будет ли id всегда третьим атрибутом.
Если вы готовы сделать три звонка JSONPath, вариант 2 будет довольно простым. Получение профиля, если type = customer будет выглядеть следующим образом: '$ .. [? (@. Type == 'customer')]. Profile_id'. См. [Link] (http://stackoverflow.com/questions/30680515/find-object-in-nested-data-by-property-value-with-jsonpath/30683008#30683008) для другого примера. Кроме того, поскольку вы можете столкнуться с проблемами с этим, вам не хватает синтаксиса в вашем JSON, например. запятые между полями и двойные кавычки вокруг имен свойств. – Duncan
Дункан, это отлично работало для моей ситуации. Также спасибо за вызов синтаксиса. Я отредактирую вопрос, чтобы улучшить его. –
Рад, что я мог помочь. Я отправлю это в качестве официального ответа, чтобы этот вопрос можно было закрыть. – Duncan