• 0
sviat9440

JSON

Вопросы

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

 

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

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

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


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

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

  • 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 пользователей онлайн

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