DMS Опубликовано 16 марта, 2018 Поделиться Опубликовано 16 марта, 2018 Читал на этом форуме, что многие пользуются XSuperObject для работы с Json-ом: https://github.com/onryldz/x-superobject Объясните, плиз, как работать в таких случаях: 1. Когда в Json так: "id_Parent":2, то понятно что нужно брать значение так: xObj.I['id_Parent'] А если вот так - "id_Parent":null ? Как перед чтением числа проверить на его null ? 2. Что если объект есть, но он пустой: "MemberView":[] Как проверить на пустоту? Спасибо! Цитата Ссылка на комментарий
0 sinuke Опубликовано 16 марта, 2018 Поделиться Опубликовано 16 марта, 2018 (изменено) не знаю как с null'ом, но вот MemberView - это массив (в квадратных же скобках). тут проще. что-то типа такого: var MemView: ISuperArray; myJSON: ISuperObject; ... myJSON := SO('сюда загоняем json'); MemView := myJSON.A['MemberView']; if MemView.Length = 0 then {Пустой массив} П.С. глянул то, как можно проверить на null, вышло следующее (вроде работает): var x: ISuperObject; begin x := SO('{"value":null}'); if x.Null['value'] = jNull then ShowMessage('null') else ShowMessage(x.I['value'].ToString) end; Изменено 16 марта, 2018 пользователем sinuke DMS 1 Цитата Ссылка на комментарий
0 x11 Опубликовано 27 ноября, 2020 Поделиться Опубликовано 27 ноября, 2020 Не могу понять, как пройтись по всем объектам и у каждого объекта по их массивам? Цитата {"ID":[0,55,true,false], "ID2":[1,60,false,false]}, "ID3":[2,177,false,false]} Все примеры, которые я видел, привязываются к имени объекта. А если нужно без имени, а если имя и значение нужно получать во время итераций? Спасибо. Цитата Ссылка на комментарий
0 Tumaso Опубликовано 27 ноября, 2020 Поделиться Опубликовано 27 ноября, 2020 Скажи, а зачем вообще использовать библиотеку, которая не развивается? Ingalime 1 Цитата Ссылка на комментарий
0 x11 Опубликовано 27 ноября, 2020 Поделиться Опубликовано 27 ноября, 2020 Я уже задолбался. Одни говорят, использовать, другие, говорят, не использовать. Я пытался использовать ту, новую встроенную в Дельфи, начиная с версии 10.1 - "JSON Objects Framework" http://docwiki.embarcadero.com/Libraries/Sydney/en/System.JSON.Builders но в Sydney есть проблема и индексами в массивах. Цитата Ссылка на комментарий
0 x11 Опубликовано 27 ноября, 2020 Поделиться Опубликовано 27 ноября, 2020 (изменено) вроде начинает доходить procedure TForm1.Button1Click(Sender: TObject); const sJSon = '{"ID":[0,55,true,false], "ID2":[1,60,false,false], "ID3":[2,177,false,false]}'; var Arr: ISuperArray; myJSON: ISuperObject; OMember: IMember; i: integer; begin myJSON := SO(sJSon); if myJSON.Count > 0 then begin for OMember in myJSON do if OMember.DataType = dtArray then begin arr := OMember.AsArray; Memo1.Lines.Add(IntToStr(arr.i[0])); Memo1.Lines.Add(IntToStr(arr.i[1])); Memo1.Lines.Add(BoolToStr(arr.B[2])); Memo1.Lines.Add(BoolToStr(arr.B[3])); Memo1.Lines.Add('---'); end; end; end; Изменено 27 ноября, 2020 пользователем x11 Цитата Ссылка на комментарий
0 krapotkin Опубликовано 29 ноября, 2020 Поделиться Опубликовано 29 ноября, 2020 В 27.11.2020 в 19:10, Tumaso сказал: Скажи, а зачем вообще использовать библиотеку, которая не развивается? потому что она удобнее Цитата Ссылка на комментарий
0 x11 Опубликовано 29 ноября, 2020 Поделиться Опубликовано 29 ноября, 2020 (изменено) В 27.11.2020 в 16:10, Tumaso сказал: библиотеку, которая не развивается? Ну вот я использовал библиотеку, которая развивается и что из этого вышло? Один и тот же код в разных версиях Дельфи (Rio и Sydney) дает разный результат procedure TForm1.btnReadArrayClick(Sender: TObject); const sJSon = '{"ID":[0,55,true,false], "ID2":[1,60,false,false]}'; var Iterator: TJSONIterator; Reader: TJsonTextReader; TextReader: TStringReader; begin TextReader := TStringReader.Create(sJSon); Reader := TJsonTextReader.Create(TextReader); Iterator := TJSONIterator.Create(Reader); try while Iterator.Next do begin if Iterator.&Type = TJsonToken.StartArray then if Iterator.Recurse then while Iterator.Next do begin Memo1.Lines.Add('Key: ' + Iterator.Key); Memo1.Lines.Add('Index:' + Iterator.Index.ToString); end; end;//while finally FreeAndNil(TextReader); FreeAndNil(Iterator); FreeAndNil(Reader); end; end; Речь, о встроенной в Дельфи джейсон-библиотеке (Readers and Writers JSON Framework), которая поставляется, начиная с Seatle вот здесь есть описание на русском https://webdelphi.ru/2019/03/rabota-s-json-v-delphi-10-3-rio-2/ Изменено 29 ноября, 2020 пользователем x11 Ingalime 1 Цитата Ссылка на комментарий
0 slav_z Опубликовано 30 ноября, 2020 Поделиться Опубликовано 30 ноября, 2020 19 часов назад, krapotkin сказал: потому что она удобнее все сторонние библиотеки рано или поздно превращаются в "камень в ботинке"... вопрос только во времени когда это случится... и если написано уже много кода, то переписывание и тестирование заново всего - это очень неприятная ситуация... я бы не стал самому себе на будущее подкладывать такую свинью... только когда стандартными компонентами не обойтись никак.. или время жизни проекта 3-4 года... Ingalime 1 Цитата Ссылка на комментарий
0 Android Опубликовано 6 декабря, 2020 Поделиться Опубликовано 6 декабря, 2020 XSuperObject вроде неплох, но безумно долго обрабатывает даже 10 МБ json-файл. Просто загружаю его и прохожусь по всем элементам. Есть способ ускорить процесс? Цитата Ссылка на комментарий
0 x11 Опубликовано 6 декабря, 2020 Поделиться Опубликовано 6 декабря, 2020 попробуйте спросить на sql.ru, ну и не забудьте примеры кода приложить Цитата Ссылка на комментарий
0 Android Опубликовано 6 декабря, 2020 Поделиться Опубликовано 6 декабря, 2020 14 минут назад, x11 сказал: попробуйте спросить на sql.ru, ну и не забудьте примеры кода приложить Код даже не нужен. Основное время уходит на загрузку через SO(<строка>) Цитата Ссылка на комментарий
0 x11 Опубликовано 6 декабря, 2020 Поделиться Опубликовано 6 декабря, 2020 а сам файл на каких-нибудь онлайн сервисах нормально проходит валидацию? может джейсон немного кривоват? Пробуйте другие парсеры. Если у вас Delphi до 10.4.1, то новый TJSONIterator должен отработать быстрее. Цитата Ссылка на комментарий
Вопрос
DMS
Читал на этом форуме, что многие пользуются XSuperObject для работы с Json-ом: https://github.com/onryldz/x-superobject
Объясните, плиз, как работать в таких случаях:
1. Когда в Json так: "id_Parent":2,
то понятно что нужно брать значение так: xObj.I['id_Parent']
А если вот так - "id_Parent":null ? Как перед чтением числа проверить на его null ?
2. Что если объект есть, но он пустой:
"MemberView":[]
Как проверить на пустоту?
Спасибо!
Ссылка на комментарий
12 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.