Перейти к содержанию
Fire Monkey от А до Я
  • 0

JSON


sviat9440

Вопрос

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

 

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

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

Ссылка на комментарий

Рекомендуемые сообщения

  • 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

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

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

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

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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

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