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
В запросе как показал выше приходят не только переменные, а еще и словари и списки.
Куда посмотреть и что почитать чтобы завести это дело?
До этого работал с "простым апи" (получал только переменные, без списков и словарей), вопросов не возникало, все работало корректно.
Спасибо.
 
юзай кубик парсить json , зачем тебе c# то ?
У меня получить ответ от апи заложено в логике и запрос этот в цикле, в этом кубике еще много чего интересного, если городить все это через кубики, будет очень-jочень громоздко и сложно)
 
Json это не C#
Так нельзя, если хотите в несколько строк писать, нужна интерполяция строк и скобки дублировать.
 
  • Оценить
Реакции: arbplv
А вообще как записать вот этот кусочек кода в переменную
Json это не C#
Так нельзя, если хотите в несколько строк писать, нужна интерполяция строк и скобки дублировать.
я понимаю что Json не C#, апи то отдает в формате Json, вот мне надо как то раскидать часть данных по переменным, конечно можно делать это все через регулярки, но хочется найти решение проще)
 
Мне дотягиваться бы надо и до var3 и до var9 (пример в самом верху), а вот как это все сделать, пока не понятно.
 
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
Необходимо десериализовать этот json. Если стандартные инструменты не подходят, то можно использовать библиотеку от Newtonsoft
 
  • Оценить
Реакции: arbplv
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"}]
 
Нет, код у меня приходит в одну строчку, это я написал для удобства понимания. Если взять этот кусочек, то он у меня приходит вот так
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
Чтобы код заработал, нужно подключить библиотеку Newtonsoft. Результат ниже:

71291
 
  • Оценить
Реакции: Lest и arbplv
  • Оценить
Реакции: arbplv
Необходимо десериализовать этот json. Если стандартные инструменты не подходят, то можно использовать библиотеку от Newtonsoft
Спасибо, да такой способ мне подойдет, есть пару вопросов, ответь плиз если знаешь.
прочитал пост https://zennolab.com/discussion/thr...nnoposter-i-newtonsoft-json.45735/post-339332
Но модерация в этой же теме пишет что библиотека эта встроена уже и можно ее юзать подключив ее.
using Global.ZennoLab.Json.Linq;
Вопросы.
1. Подключить ее достаточно только в общий код или еще нужно в директивы using?
2. Что добавить в код и распарсить json, чтобы вызывать ее, не совсем понимаю что там написано (Добавить в референсы следующие либы), а автор давно не онлайн.
Подскажи как поработать с этой библиотекой?
Нашел прикольный сайт (http://json.parser.online.fr), там все распарсивается корректно, т.е. json у меня корректный.
 
Я вообще не понимаю, в чем проблема. Парсится же. А вот синтаксическая ошибка в предоставленном отрывке есть, хотя и несмотря на нее тоже парсится.
Еще не видел, чего нельзя сделать встроенными методами. Что сделать-то надо? Переменные раскидать все? Не вижу проблем.
 
Я вообще не понимаю, в чем проблема. Парсится же. А вот синтаксическая ошибка в предоставленном отрывке есть, хотя и несмотря на нее тоже парсится.
Да, действительно все парсится)
Проблема добраться "var6" , как получить это значение., вот так чет не работает
C#:
Развернуть Свернуть Копировать
JObject json = JObject.Parse(resRequest);
return json["var4"]["var8"];
 

Вложения

  • 1611686163412.png
    1611686163412.png
    59,8 KB · Просмотры: 58
Последнее редактирование:
Другое дело - как парсится. Только к окончанию написания своего сниппета понял, что требовалось... Но не пропадать же добру
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
Другое дело - как парсится. Только к окончанию написания своего сниппета понял, что требовалось... Но не пропадать же добру
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"].
 
Тема закрыта. Всем огромное спасибо!
Решилось добавлением в директиву
C#:
Развернуть Свернуть Копировать
using "using Global.ZennoLab.Json.Linq;"
resRequest - тут нас полученный json
Далее засовываем в переменную
C#:
Развернуть Свернуть Копировать
var json = JObject.Parse(resRequest);
и читаем по ключам
C#:
Развернуть Свернуть Копировать
json[key]
 
  • Оценить
Реакции: Koqpe и SHILY

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