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

Subline

Client
Регистрация
11.03.2022
Сообщения
4
Реакции
1
Баллы
3
Всех приветствую. Столкнулся с проблемой ответ на get запрос приходит в JSON (файл прикрепил). Вот такого вида:
[
{
"id": "702d4c35-0655-4643-a2c0-4505da532844",
"profile_pic": "https://lh4.googleusercontent.com/-...cki-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/thr...nnoposter-i-newtonsoft-json.45735/post-339332 но ничего не вышло. Может быть кто-нибудь имеет опыт парсинга больших массивов данных и может разъяснить новичку каким образом можно распарсить данный JSON.
 

Вложения

  • json.txt
    json.txt
    15,2 MB · Просмотры: 204
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 в элементе массива - нет.
 

Вложения

Парсинг регуляркой отрабатывает
 

Вложения

  • names.zip
    names.zip
    3,9 MB · Просмотры: 163
Посмотреть вложение 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 - нет
 
Возможно у меня не получается потому что версия ZP 7.7.0.0 и в ней не работает так парсинг? и в юзингах у меня
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
а вот что у вас using Global.ZennoLab.Json - нет
Просто проверьте мой вариант. Юзинг, который прописал я - тот же newtonsoft json, но который уже встроен в постер.
 
  • Спасибо
Реакции: Subline
Просто проверьте мой вариант. Юзинг, который прописал я - тот же newtonsoft json, но который уже встроен в постер.
Компиляция кода Ошибка в действии "CS1002" "Ошибка в директивах using. ; expected". [Строка: 0; Cтолбец: 27]
Можете понизить ваш файл до 7.7.0.0 возможно я что то не так делаю я добавил в юзинг Global.ZennoLab.Json в общий код и дерективы, создал кубик c# и вставил ваш код, создал список usernamesList и файл json.txt положил в директорию проекта.


Все получилось я дурак в юзингах ; не поставил
 
Последнее редактирование:
  • Спасибо
Реакции: n0n3mi1y
Всех приветствую. Столкнулся с проблемой ответ на get запрос приходит в JSON (файл прикрепил). Вот такого вида:
[
{
"id": "702d4c35-0655-4643-a2c0-4505da532844",
"profile_pic": "https://lh4.googleusercontent.com/-...cki-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/thr...nnoposter-i-newtonsoft-json.45735/post-339332 но ничего не вышло. Может быть кто-нибудь имеет опыт парсинга больших массивов данных и может разъяснить новичку каким образом можно распарсить данный JSON.
Попробовал разобрать ваш json и не увидел никаких проблем. Стандартным кубиком все разложилось за считанные секунды. Не забывайте что PM и ZP работают по разному. Скорость разложения JSON в PM занимает значительное время в то время как в ZP эта же операция времени не есть совсем. Раскидать по нужным спискам этот JSON уже займет какое то время. Но разложить его проблемы нет никакой...

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

Вложения

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

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