Как получить длину массива JSON с помощью JSONPath?

Если у меня есть документ JSON, подобный этому

[
    {
        "number" : "650-462-9154",
        "type" : "main"
    },
    {
        "number" : "650-462-1252",
        "type" : "fax"
    }
]

Какой JSONPath я могу использовать для получения длины массива (которая равна 2) без жесткого кодирования каких-либо значений свойств?

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

[
  { 
    "type": "add",
    "id":   "tt0484562",
    "version": 1,
    "lang": "en",
    "fields": {
      "title": "The Seeker: The Dark Is Rising",
      "director": "Cunningham, David L.",
      "genre": ["Adventure","Drama","Fantasy","Thriller"],
      "actor": ["McShane, Ian","Eccleston, Christopher","Conroy, Frances",
                "Crewson, Wendy","Ludwig, Alexander","Cosmo, James",
                "Warner, Amelia","Hickey, John Benjamin","Piddock, Jim",
                "Lockhart, Emma"]
    }
  },
  { 
    "type": "delete",
    "id":   "tt0484575",
    "link_ref": null,
    "version": 2
  }
]

$.[0].genre ---> 0
$.[0].fields.genre ---> 1
$.[0].fields.genre[*] ---> 4
$.[*].type ---> 2
$.[1].link_ref ---> 1

person omega    schedule 20.08.2018    source источник
comment
Какое определение для GetJSONValueCount?   -  person Heretic Monkey    schedule 20.08.2018
comment
Добавил слишком много информации, теперь стало чище.   -  person omega    schedule 20.08.2018
comment
Программа, которой я пользуюсь, принимает его именно в таком формате.   -  person omega    schedule 20.08.2018


Ответы (1)


Вы можете получить длину массива из первого примера, используя функцию .length() следующим образом:

$.length

Это должно вернуть что-то вроде этого:

[
    2
]

Что касается второго примера, вы можете получить доступ к любым ключам массива, используя обычную запись через точку ($.node1.node2.node3), и вызвать функцию length() для ключа узла, длину которого вы хотите получить. Например, если вы хотите получить количество значений в массиве актеров, вы можете сделать что-то вроде:

$..actor.length

Что вернет что-то вроде этого:

[
    10
]

Протестировано на https://codebeautify.org/jsonpath-tester и http://jsonpath.com/ .

Дополнительные функции можно найти в репозитории jsonpath на github.

person Viktor    schedule 07.09.2018
comment
где задокументированы действительные функции jsonpath? - person Evren Yurtesen; 16.05.2020