Как выбрать JToken на основе нескольких имен кандидатов в JSONPath?

У меня есть JObject, как это:

{
  name1: {
    value [
    ...
    ]
  }
}

Это также может быть в форме:

{
  name2: {
    value [
    ...
    ]
  }
}

Поэтому я пытаюсь использовать один JSONPath для выбора JArray value из. Есть ли способ сделать что-то подобное?

$['name1' or 'name2']['value']

1 ответ

Решение

Основываясь на ответах на эти два вопроса SO: оператор OR в JSONPath? и JsonPath и оператор на массиве, кажется AND а также OR операторы еще не полностью поддерживаются в JSONPath.

Однако мы можем использовать оператор объединения, чтобы приблизить то, что нам нужно. Основываясь на документации JSONPath,

Union operator in XPath results in a combination of node sets.
JSONPath allows alternate names or array indices as a set.

Кажется, это то, что нам нужно, но тем не менее, оператор JsonPath AND на массиве отметил, что оператор объединения может иметь некоторые ошибки или тонкие различия между различными реализациями.

Похоже, я выполнил свою собственную проверку здесь: http://jsonpath.herokuapp.com/.

я пробовал ['name1','name2']['value'] и все, кроме реализации Nebhale, правильно анализирует то, что мне нужно. Так что я думаю, что есть решение моей исходной проблемы, но оно немного зависит от реализации, поэтому сначала полностью протестируйте свой собственный код, чтобы убедиться, что этот оператор JSONPath и union будет работать в вашей кодовой базе.

Другие вопросы по тегам