• 0
sviat9440

JSON

Вопросы

 Есть ли более адекватный компонент, чем TJSONObject?

 

Меня он не устраивает тем, что он не может распарсить запить типа: {"data":["val1", "val2", "val3"]}. Тоесть я могу получить строку по ключу "data", но ее саму мне приходится парсить вручную.

И еще одно: при неудачном парсинге, он не вызывает экзепшн. Тоесть обнаружить ошбку можно только при последующей работе или дополнительными костылями.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 ответов на этот вопрос

  • 0

И как?

data := '{"ok":true,"data":["var1","var2"]}';
JSON := TJSONObject.ParseJSONValue(data) as TJSONObject;
Pair := JSON.GetValue('data') as TJSONPair; //ошибка
data := '{"ok":true,"data":["var1","var2"]}';
JSON := TJSONObject.ParseJSONValue(data) as TJSONObject;
JSON1 := TJSONObject.ParseJSONValue(JSON.GetValue('data').Value) as TJSONObject; //ошибка

 

Изменено пользователем sviat

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 1

тут уже не раз хвалили, и я в том числе, X-SuperObject

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 1

Вот пример кода для вашего случая

Var Source : String;
    JSON : TJSONObject;
    JSONValue : TJSONValue;
    JSONArray : TJSONArray;
    I : Integer;
begin
  Source:='{"data":["val1", "val2", "val3"]}';
  JSON:=TJSONObject(TJSONObject.ParseJSONValue(Source));
  if Not Assigned(JSON) then
    Exit;
  if JSON.TryGetValue('data',JSONValue) then
    if TJSONObject(JSONValue).ClassName.Equals('TJSONArray') then
    begin
      JSONArray:=TJSONArray(JSONValue);
      if Assigned(JSONArray) then
        for I := 0 to JSONArray.Count-1 do
          Memo.Lines.Add(JSONArray.Items[I].Value);
    end;
end;

Для проверок неудачного парсинга есть такие инструменты как "if Assigned(JSON) then" и "JSON.TryGetValue('data',JSONValue)"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 01.06.2016 в 15:07, krapotkin сказал:

тут уже не раз хвалили, и я в том числе, X-SuperObject

Да, очень удобная библиотека.

Денек позаморачиваться — для дельфиста в новинку.
Зато потом с API общаться вообще нет проблем.

 

Изменено пользователем Pax Beach

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 6/1/2016 в 17:09, sviat9440 сказал:

Как у него обстоят дела с юникодом? ну там типа /u20000/u352121

с юникодом там все хорошо, но по умолчанию при создании текста он делает /uXXXX

я себе держу простенькую функцию перекодировки на русские символы и более не беспокоюсь

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу