Сложности JSONpath
Есть огромный Json с кучей массивов в массивах. Вот маленький кусок этого Json:
{
"tasks": [
{
"id": 68759187,
"create_date": "2020-10-12T01:56:03Z",
"last_modified_date": "2021-05-24T18:11:04Z",
"last_note_id": 732482166,
"current_step": 3,
"fields": [
{
"id": 37,
"type": "table",
"name": "Данные",
"value": [
{
"row_id": 2,
"cells": [
{
"id": 38,
"type": "text",
"name": "Наименование ТТ",
"parent_id": 37,
"row_id": 2,
"value": "СПО МП \"Тест11\", г. Ололольск, ул. Ленина, д. 88"
},
{
"id": 39,
"type": "text",
"name": "ФИО Сотрудника (обязательно для Лидов)",
"parent_id": 37,
"row_id": 2,
"value": "Тестов Игнат Тестович"
},
Я почитал документацию https://goessner.net/articles/JsonPath/ и написал вот такое:
$.tasks[?(@.fields[?(@.id==37)])].id
И после прочтения документации в моём понимании это должно работать, но нет... Вообще мне нужно выдернуть tasks по более изощрённому фильтру большей вложенности, но думаю если получу ответ хотя бы как правильно написать текущий селект, то уже справлюсь и с нужным мне. Подскажите пожалуйста чего я не понял и как правильно написать?
Ответы (1 шт):
Ваш jsonpath вполне правильный и рабочий.
Я скопировал ваш json, закрыл скобки, проверил ваш jsonpath в c# с библиотекой Newtonsoft. Работает! Метод SelectToken с указанным jsonpath возвращает значение 68759187.
Код C#. Работоспособность VB.NET ничем не должна отличаться.
string text = File.ReadAllText("test.json");
var json = JObject.Parse(text);
var id = json.SelectToken("$.tasks[?(@.fields[?(@.id==37)])].id");
Console.WriteLine(id);
Используемые пространства имён:
using Newtonsoft.Json.Linq;
using System;
using System.IO;