Json + c#

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Возникла сложность, работаю с апи и json.
Получаю огромный запрос, пример кусочка
C#:
{
    "var1": 5,
    "var2": 5,
    "var3": 0,
    "var4":
        [
            {
              "var5": "3b8a161fc9de22a3b5990bd751a57773",
              "var6": 30114122,
              "var7": null,
              "var8": "7:3",
              "var9": [2048, 65536],
            },
            {
            "var10": "1f2",
            "var11": "1fd2"
            }
        ],
    "var12": [],
    "var13": "rest-api"
}
Потом хочу с ним начать работать как Json, делаю
"project.Json.FromString(resRequest);" (post запрос приходит в resRequest.)
и получаю 100-500 ошибок
71288
В запросе как показал выше приходят не только переменные, а еще и словари и списки.
Куда посмотреть и что почитать чтобы завести это дело?
До этого работал с "простым апи" (получал только переменные, без списков и словарей), вопросов не возникало, все работало корректно.
Спасибо.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 712
Баллы
113

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
юзай кубик парсить json , зачем тебе c# то ?
У меня получить ответ от апи заложено в логике и запрос этот в цикле, в этом кубике еще много чего интересного, если городить все это через кубики, будет очень-jочень громоздко и сложно)
 

Meteorburn

Client
Регистрация
23.05.2016
Сообщения
1 468
Благодарностей
574
Баллы
113
Json это не C#
Так нельзя, если хотите в несколько строк писать, нужна интерполяция строк и скобки дублировать.
 
  • Спасибо
Реакции: arbplv

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
А вообще как записать вот этот кусочек кода в переменную
Json это не C#
Так нельзя, если хотите в несколько строк писать, нужна интерполяция строк и скобки дублировать.
я понимаю что Json не C#, апи то отдает в формате Json, вот мне надо как то раскидать часть данных по переменным, конечно можно делать это все через регулярки, но хочется найти решение проще)
 

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Мне дотягиваться бы надо и до var3 и до var9 (пример в самом верху), а вот как это все сделать, пока не понятно.
 

Meteorburn

Client
Регистрация
23.05.2016
Сообщения
1 468
Благодарностей
574
Баллы
113
C#:
string jsonString = $@"{{
    ""var1"": 5,
    ""var2"": 5,
    ""var3"": 0,
    ""var4"":
        [
            {{
                ""var5"": ""3b8a161fc9de22a3b5990bd751a57773"",
                ""var6"": 30114122,
                ""var7"": null,
                ""var8"": ""7:3"",
                ""var9"": [2048, 65536],
        }},
            {{
                ""var10"": ""1f2"",
                ""var11"": ""1fd2""
        }}
            ],
            ""var12"": [],
    ""var13"": ""rest-api""
        }}";
 
  • Спасибо
Реакции: arbplv

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
550
Баллы
93
Необходимо десериализовать этот json. Если стандартные инструменты не подходят, то можно использовать библиотеку от Newtonsoft
 
  • Спасибо
Реакции: arbplv

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
C#:
string jsonString = $@"{{
    ""var1"": 5,
    ""var2"": 5,
    ""var3"": 0,
    ""var4"":
        [
            {{
                ""var5"": ""3b8a161fc9de22a3b5990bd751a57773"",
                ""var6"": 30114122,
                ""var7"": null,
                ""var8"": ""7:3"",
                ""var9"": [2048, 65536],
        }},
            {{
                ""var10"": ""1f2"",
                ""var11"": ""1fd2""
        }}
            ],
            ""var12"": [],
    ""var13"": ""rest-api""
        }}";
Нет, код у меня приходит в одну строчку, это я написал для удобства понимания. Если взять этот кусочек, то он у меня приходит вот так
C#:
[{"var1":5,"var2":5,"var3":0,"var4":[{"var5":"3b8a161fc9de22a3b5990bd751a57773","var6":30114122,"var7":null,"var8":"7:3","var9":[2048,65536],},{"var10":"1f2","var11":"1fd2"}],"var12":[],"var13":"rest-api"}]
 

Meteorburn

Client
Регистрация
23.05.2016
Сообщения
1 468
Благодарностей
574
Баллы
113
Нет, код у меня приходит в одну строчку, это я написал для удобства понимания. Если взять этот кусочек, то он у меня приходит вот так
C#:
[{"var1":5,"var2":5,"var3":0,"var4":[{"var5":"3b8a161fc9de22a3b5990bd751a57773","var6":30114122,"var7":null,"var8":"7:3","var9":[2048,65536],},{"var10":"1f2","var11":"1fd2"}],"var12":[],"var13":"rest-api"}]
Выше подсказали, что использовать для работы с JSON.
 
  • Спасибо
Реакции: arbplv

dizney

Client
Регистрация
25.01.2014
Сообщения
51
Благодарностей
52
Баллы
18
Чтобы код заработал, нужно подключить библиотеку Newtonsoft. Результат ниже:

71291
 
  • Спасибо
Реакции: Lest и arbplv

Meteorburn

Client
Регистрация
23.05.2016
Сообщения
1 468
Благодарностей
574
Баллы
113

dizney

Client
Регистрация
25.01.2014
Сообщения
51
Благодарностей
52
Баллы
18
  • Спасибо
Реакции: arbplv

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Необходимо десериализовать этот json. Если стандартные инструменты не подходят, то можно использовать библиотеку от Newtonsoft
Спасибо, да такой способ мне подойдет, есть пару вопросов, ответь плиз если знаешь.
прочитал пост https://zennolab.com/discussion/threads/kak-podruzhit-zennoposter-i-newtonsoft-json.45735/post-339332
Но модерация в этой же теме пишет что библиотека эта встроена уже и можно ее юзать подключив ее.
using Global.ZennoLab.Json.Linq;
Вопросы.
1. Подключить ее достаточно только в общий код или еще нужно в директивы using?
2. Что добавить в код и распарсить json, чтобы вызывать ее, не совсем понимаю что там написано (Добавить в референсы следующие либы), а автор давно не онлайн.
Подскажи как поработать с этой библиотекой?
Нашел прикольный сайт (http://json.parser.online.fr), там все распарсивается корректно, т.е. json у меня корректный.
 

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 421
Баллы
113
Я вообще не понимаю, в чем проблема. Парсится же. А вот синтаксическая ошибка в предоставленном отрывке есть, хотя и несмотря на нее тоже парсится.
Еще не видел, чего нельзя сделать встроенными методами. Что сделать-то надо? Переменные раскидать все? Не вижу проблем.
 

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Я вообще не понимаю, в чем проблема. Парсится же. А вот синтаксическая ошибка в предоставленном отрывке есть, хотя и несмотря на нее тоже парсится.
Да, действительно все парсится)
Проблема добраться "var6" , как получить это значение., вот так чет не работает
C#:
JObject json = JObject.Parse(resRequest);
return json["var4"]["var8"];
 

Вложения

Последнее редактирование:

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
550
Баллы
93

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 421
Баллы
113
Другое дело - как парсится. Только к окончанию написания своего сниппета понял, что требовалось... Но не пропадать же добру
C#:
project.Json.FromString(project.Variables["resRequest"].Value);
List<string> parentsList = project.Json.GetMembersList();
foreach(string parent in parentsList){
    string value = project.Json.GetMember(parent.ToString()).ToString();
    string parent1 = project.Json.GetMember(parent.ToString()).ToString();
    project.SendInfoToLog(string.Format(@"{0} = {1}", parent, value), true);
    try{
        project.Json.FromString(parent1);
        List<string> children = project.Json.GetMembersList();
        if(children.Count > 0){
            children.RemoveAt(0);
            for(int i = 0; i < children.Count; i++){
                string child = string.Empty;
                    child = project.Json[i].ToString();
                    project.Json.FromString(child);
                foreach(string child1 in project.Json.GetMembersList()){
                    try{
                        value = project.Json.GetMember(child1.ToString()).ToString();
                    }
                    catch{
                        value = string.Empty;
                    }
                    project.SendInfoToLog(string.Format(@"{0} = {1}", child1, value), true);
                }
                if(child != children.Last())
                    project.Json.FromString(parent1);
            }
        }
    }catch{}
    if(parent != parentsList.Last())
        project.Json.FromString(project.Variables["resRequest"].Value);   
}
Конечно, это убожество можно сделать изящнее, но я писал так, как летела мысль.
 
  • Спасибо
Реакции: Dorian_Gray и arbplv

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Другое дело - как парсится. Только к окончанию написания своего сниппета понял, что требовалось... Но не пропадать же добру
C#:
project.Json.FromString(project.Variables["resRequest"].Value);
List<string> parentsList = project.Json.GetMembersList();
foreach(string parent in parentsList){
    string value = project.Json.GetMember(parent.ToString()).ToString();
    string parent1 = project.Json.GetMember(parent.ToString()).ToString();
    project.SendInfoToLog(string.Format(@"{0} = {1}", parent, value), true);
    try{
        project.Json.FromString(parent1);
        List<string> children = project.Json.GetMembersList();
        if(children.Count > 0){
            children.RemoveAt(0);
            for(int i = 0; i < children.Count; i++){
                string child = string.Empty;
                    child = project.Json[i].ToString();
                    project.Json.FromString(child);
                foreach(string child1 in project.Json.GetMembersList()){
                    try{
                        value = project.Json.GetMember(child1.ToString()).ToString();
                    }
                    catch{
                        value = string.Empty;
                    }
                    project.SendInfoToLog(string.Format(@"{0} = {1}", child1, value), true);
                }
                if(child != children.Last())
                    project.Json.FromString(parent1);
            }
        }
    }catch{}
    if(parent != parentsList.Last())
        project.Json.FromString(project.Variables["resRequest"].Value); 
}
Конечно, это убожество можно сделать изящнее, но я писал так, как летела мысль.
Ого как тут сложно (куча перегрузок и методов про которые я даже не слышал))), извини, видимо я не правильно изложил проблему свою. Решилось добавлением в директиву using "using Global.ZennoLab.Json.Linq;" и строчкой кода var json = JObject.Parse(resRequest); теперь могу получать значения json["key"].
 

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Тема закрыта. Всем огромное спасибо!
Решилось добавлением в директиву
C#:
using "using Global.ZennoLab.Json.Linq;"
resRequest - тут нас полученный json
Далее засовываем в переменную
C#:
var json = JObject.Parse(resRequest);
и читаем по ключам
C#:
json[key]
 
  • Спасибо
Реакции: Koqpe и SHILY

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