Распарсить JSON в список

blamingas

Client
Регистрация
14.05.2021
Сообщения
114
Благодарностей
45
Баллы
28
Приветствую! Есть вот такой JSON ответ на запрос диапазона в гугл-таблице.
Пытаюсь распарсить полученные значения в список посредством "JSON - в список". Кучу примеров пересмотрел - не получается. Если в подсвойство вписать параметр "values" - он весь массив помещает в одну строку списка, оно и не удивительно, ведь массив заключен внутри свойства "values.
Временно прикостылился через цикл брать по очереди каждое значение и заносить в список (счетчик + значение в Подсвойстве: values[{-Variable.Counter0-}][0] ), но получается очень долго, в массиве >10 000 значений. Хотелось бы спарсить в список сразу весь массив, подставив вместо счётчика что-то вроде "*".
Как это можно сделать в данном случае?


JSON:
{
  "values": [
    [
      "222"
    ],
    [
      "444"
    ],
    [
      "333"
    ],
    [
      "555"
    ],
    [
      "777"
    ],
    [
      "7361"

    ],
    [
      "77197"
    ]
  ]
}
8624686248
 
Последнее редактирование:
  • Спасибо
Реакции: x_tonic

trecho

Client
Регистрация
12.07.2018
Сообщения
171
Благодарностей
124
Баллы
43
C#:
JObject json = JObject.Parse(project.Variables["json"].Value);

var values =
    from v in json["values"].SelectMany(i => i).Values<string>()
    group v by v
    into g
    orderby g.Count() descending
  select new { Category = g.Key};

foreach (var v in values)
{
    Macros.TextProcessing.ToList(v.Category, "\r\n", "Text", project, project.Lists["json"]);
}
из переменной "json" в список "json"
для работы нужен newtonsoft json , вот шаблон с ним уже подключенным
 

x_tonic

Client
Регистрация
24.11.2018
Сообщения
25
Благодарностей
1
Баллы
3
Как раз тоже занимаюсь вопросом "как правильно работать с JSON". Pro´s не проходите мимо )
 

blamingas

Client
Регистрация
14.05.2021
Сообщения
114
Благодарностей
45
Баллы
28
C#:
JObject json = JObject.Parse(project.Variables["json"].Value);

var values =
    from v in json["values"].SelectMany(i => i).Values<string>()
    group v by v
    into g
    orderby g.Count() descending
  select new { Category = g.Key};

foreach (var v in values)
{
    Macros.TextProcessing.ToList(v.Category, "\r\n", "Text", project, project.Lists["json"]);
}
из переменной "json" в список "json"
для работы нужен newtonsoft json , вот шаблон с ним уже подключенным
Фантастика! Прикрутил - всё работает, красиво ложится в список в долю секунды. Спасибо огромное!
 
  • Спасибо
Реакции: trecho

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 820
Баллы
113
Можно без C#: при парсинге укажите JSONPath $.values[*].[*]
А в экшене "Json в список" поля "Свойство" и "Подсвойство" оставьте пустыми.
86250
 
  • Спасибо
Реакции: doc, trecho и blamingas

blamingas

Client
Регистрация
14.05.2021
Сообщения
114
Благодарностей
45
Баллы
28
Можно без C#: при парсинге укажите JSONPath $.values[*].[*]
А в экшене "Json в список" поля "Свойство" и "Подсвойство" оставьте пустыми.
Класс! Спасибо! Так, пожалуй, даже проще. Хотя решение trecho натолкнуло меня на мысль как обходить известное зависание синхронизации(обновления) гугл-таблицы - путём Get-запроса брать всю таблицу, парсить полностью с помощью этой библиотеки, и пересобирать уже в виде локальной копии обычной таблицы.
 

blamingas

Client
Регистрация
14.05.2021
Сообщения
114
Благодарностей
45
Баллы
28
Можно без C#: при парсинге укажите JSONPath $.values[*].[*]
А в экшене "Json в список" поля "Свойство" и "Подсвойство" оставьте пустыми.
Подскажите, пожалуйста, а почему этот же метод не работает, если вместо "JSON в список" выбрать "в таблицу"? Тоже поля свойство и подсвойство оставляю пустыми, указываю столбец A, но если со списком работает как надо, то тут получаю пустые строки без значений? (при этом кол-во сгенерированных строк соответствует количеству значений)
86251
 
Последнее редактирование:

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 820
Баллы
113
Подскажите, пожалуйста, а почему этот же метод не работает, если вместо "JSON в список" выбрать "в таблицу"?
Судя по всему для таблиц важно указывать "[Под]Свойства".
Но можно сначала данные загнать в список, а затем с помощью "Операции над таблицей" список перенести в таблицу.
 
  • Спасибо
Реакции: blamingas

blamingas

Client
Регистрация
14.05.2021
Сообщения
114
Благодарностей
45
Баллы
28
Судя по всему для таблиц важно указывать "[Под]Свойства".
Но можно сначала данные загнать в список, а затем с помощью "Операции над таблицей" список перенести в таблицу.
В принципе, так уже и сделал. Думал, где-то у меня косяк, и можно напрямую класть в таблицы, минуя списки. Но и так сойдёт. Спасибо.
 

x_tonic

Client
Регистрация
24.11.2018
Сообщения
25
Благодарностей
1
Баллы
3
@blamingas можешь подсказать пошагово (новичку) как ты используешь код/кубик что у тебя все работает?

-я положил из другого поста библиотеки в externalassembles
- беру json строку в кубик json парсинг через переменную, включил "обработать JsonPath" прописал $.values[*].[*]
- обрабатываю как показал nicanil
кубики отрабатывают но список остается пустым.
 

x_tonic

Client
Регистрация
24.11.2018
Сообщения
25
Благодарностей
1
Баллы
3
выключил JsonPath, теперь ложит строку в список. теперь что брать переменные json и раскладывать по столбцам?
 

blamingas

Client
Регистрация
14.05.2021
Сообщения
114
Благодарностей
45
Баллы
28
@blamingas можешь подсказать пошагово (новичку) как ты используешь код/кубик что у тебя все работает?

-я положил из другого поста библиотеки в externalassembles
- беру json строку в кубик json парсинг через переменную, включил "обработать JsonPath" прописал $.values[*].[*]
- обрабатываю как показал nicanil
кубики отрабатывают но список остается пустым.
Если ты делаешь по методу nicanil, то библиотеки в нем не требуются.

Возможно у тебя другие параметры из json приходят? покажи скрин результата переменных Json, который приходит после кубика парсинга с "обработать JsonPath".
Вот такой:
86257
 

x_tonic

Client
Регистрация
24.11.2018
Сообщения
25
Благодарностей
1
Баллы
3
скинул в лс
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)