Как спарсить ответ в JSON

Subline

Client
Регистрация
11.03.2022
Сообщения
4
Благодарностей
1
Баллы
3
Всех приветствую. Столкнулся с проблемой ответ на get запрос приходит в JSON (файл прикрепил). Вот такого вида:
[
{
"id": "702d4c35-0655-4643-a2c0-4505da532844",
"profile_pic": "https://lh4.googleusercontent.com/-vU46XnGb--E/AAAAAAAAAAI/AAAAAAAAAAA/AMZuucki-v0PtQnfBYB7LpM2863xLqax1w/s96-c/photo.jpg",
"username": "000",
"verified": false,
"full_name": null,
"following_status": "not-following",
"private_profile": false
},
{
"id": "e6f518e1-f28d-4802-9785-9eb8bf3f3a85",
"username": "0210",
"verified": false,
"full_name": "Ahn",
"following_status": "not-following",
"private_profile": true
}
]
В файле 61000 юзеров, и мне необходимо собрать всех в список "username", у которых "private_profile": false
Стандартный парсер JSON просто помирает, парсинг регуляркой выдает 2000 результатов на 2001 пишет "Слишком много совпадений". Я попытался использовать библиотеку Newton JSON, как описано вот тут - https://zennolab.com/discussion/threads/kak-podruzhit-zennoposter-i-newtonsoft-json.45735/post-339332 но ничего не вышло. Может быть кто-нибудь имеет опыт парсинга больших массивов данных и может разъяснить новичку каким образом можно распарсить данный JSON.
 

Вложения

  • 15,2 МБ Просмотры: 47

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 135
Благодарностей
488
Баллы
83
104750



C#:
var textJs = File.ReadAllText(project.Directory + "\\json.txt");
dynamic js = JsonConvert.DeserializeObject(textJs);
var usernamesList = project.Lists["usernames"];

for (int i = 0; i < js.Count; i++)
{
    string gotUsername = js[i].username.ToString();
    bool isPrivate = bool.Parse(js[i].private_profile.ToString());
    if (!isPrivate)
    {
        usernamesList.Add(gotUsername);
        project.SendInfoToLog($@"{i} added");
    }
    else
        project.SendInfoToLog($@"{i} skiipped");
}

p.s. проверки на то, присутствует ли вообще параметр username и private_profile в элементе массива - нет.
 

Вложения

vlsdrmy

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

Вложения

Subline

Client
Регистрация
11.03.2022
Сообщения
4
Благодарностей
1
Баллы
3

Subline

Client
Регистрация
11.03.2022
Сообщения
4
Благодарностей
1
Баллы
3
Посмотреть вложение 104750


C#:
var textJs = File.ReadAllText(project.Directory + "\\json.txt");
dynamic js = JsonConvert.DeserializeObject(textJs);
var usernamesList = project.Lists["usernames"];

for (int i = 0; i < js.Count; i++)
{
    string gotUsername = js[i].username.ToString();
    bool isPrivate = bool.Parse(js[i].private_profile.ToString());
    if (!isPrivate)
    {
        usernamesList.Add(gotUsername);
        project.SendInfoToLog($@"{i} added");
    }
    else
        project.SendInfoToLog($@"{i} skiipped");
}

p.s. проверки на то, присутствует ли вообще параметр username и private_profile в элементе массива - нет.
Возможно у меня не получается потому что версия ZP 7.7.0.0 и в ней не работает так парсинг? и в юзингах у меня
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
а вот что у вас using Global.ZennoLab.Json - нет
 

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 135
Благодарностей
488
Баллы
83
Возможно у меня не получается потому что версия ZP 7.7.0.0 и в ней не работает так парсинг? и в юзингах у меня
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
а вот что у вас using Global.ZennoLab.Json - нет
Просто проверьте мой вариант. Юзинг, который прописал я - тот же newtonsoft json, но который уже встроен в постер.
 
  • Спасибо
Реакции: Subline

Subline

Client
Регистрация
11.03.2022
Сообщения
4
Благодарностей
1
Баллы
3
Просто проверьте мой вариант. Юзинг, который прописал я - тот же newtonsoft json, но который уже встроен в постер.
Компиляция кода Ошибка в действии "CS1002" "Ошибка в директивах using. ; expected". [Строка: 0; Cтолбец: 27]
Можете понизить ваш файл до 7.7.0.0 возможно я что то не так делаю я добавил в юзинг Global.ZennoLab.Json в общий код и дерективы, создал кубик c# и вставил ваш код, создал список usernamesList и файл json.txt положил в директорию проекта.


Все получилось я дурак в юзингах ; не поставил
 
Последнее редактирование:
  • Спасибо
Реакции: n0n3mi1y

Deisler

Client
Регистрация
26.10.2019
Сообщения
483
Благодарностей
183
Баллы
43
Всех приветствую. Столкнулся с проблемой ответ на get запрос приходит в JSON (файл прикрепил). Вот такого вида:
[
{
"id": "702d4c35-0655-4643-a2c0-4505da532844",
"profile_pic": "https://lh4.googleusercontent.com/-vU46XnGb--E/AAAAAAAAAAI/AAAAAAAAAAA/AMZuucki-v0PtQnfBYB7LpM2863xLqax1w/s96-c/photo.jpg",
"username": "000",
"verified": false,
"full_name": null,
"following_status": "not-following",
"private_profile": false
},
{
"id": "e6f518e1-f28d-4802-9785-9eb8bf3f3a85",
"username": "0210",
"verified": false,
"full_name": "Ahn",
"following_status": "not-following",
"private_profile": true
}
]
В файле 61000 юзеров, и мне необходимо собрать всех в список "username", у которых "private_profile": false
Стандартный парсер JSON просто помирает, парсинг регуляркой выдает 2000 результатов на 2001 пишет "Слишком много совпадений". Я попытался использовать библиотеку Newton JSON, как описано вот тут - https://zennolab.com/discussion/threads/kak-podruzhit-zennoposter-i-newtonsoft-json.45735/post-339332 но ничего не вышло. Может быть кто-нибудь имеет опыт парсинга больших массивов данных и может разъяснить новичку каким образом можно распарсить данный JSON.
Попробовал разобрать ваш json и не увидел никаких проблем. Стандартным кубиком все разложилось за считанные секунды. Не забывайте что PM и ZP работают по разному. Скорость разложения JSON в PM занимает значительное время в то время как в ZP эта же операция времени не есть совсем. Раскидать по нужным спискам этот JSON уже займет какое то время. Но разложить его проблемы нет никакой...

Возьмите небольшой кусок JSON и исходя из него пропишите все необходимые действия. При работе в ZP уже не с куском JSON, а с целиковым все отработает без задержек.
 

Вложения

  • Спасибо
Реакции: Subline и Alexmd

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