Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2015, 22:12   #1
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию Работа с JSON

Есть ли в delphi стандартные модули для работы с JSON, если есть то покажите пример как распарсить например такой код:

Код:
{
  "name": "named1234",
  "id1": 0,
  "id2": 269296463
}
nibufep вне форума Ответить с цитированием
Старый 07.02.2015, 00:08   #2
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

это добавляем в uses
Код:
{$IF CompilerVersion >= 27}System.JSON{$ELSE}DBXJSON{$IFEND}
затем
Код:
var
  JsonObj: TJSONObject;
  name: string;
  id1, id2: integer;
begin
  // AJsonString - JSON текст приведенный вами выше 
  JsonObj := TJSONObject.ParseJSONValue(AJsonString) as TJSONObject;
  try
    if Assigned(JsonObj) then
    begin
      name := JsonObj.Get('name').JsonValue.Value;
      id1 := JsonObj.Get('id1').JsonValue.Value;
      id2 := JsonObj.Get('id2').JsonValue.Value;
    end
    else
      ShowMessage('Некорректная структура данных');
  finally
    JsonObj.Free; // не забываем чистить за собой
  end;
end;
сей код справедлив для XЕ2, возможно и раньше, но нужно гуглить. если дельфа старше - библиотека SuperObject в помощь.
пишу код не только за печеньки

Последний раз редактировалось VIK_aka_TOR; 07.02.2015 в 00:13.
VIK_aka_TOR вне форума Ответить с цитированием
Старый 07.02.2015, 13:19   #3
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию

а если например код будет такой:

Код:
{
  "response": [
    {
      "id": 123,
      "name": "qw",
      "name2": "qw2"
    }
  ]
}
nibufep вне форума Ответить с цитированием
Старый 07.02.2015, 13:45   #4
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

что-то подобное тогда

Код:
var
JsonObj: TJSONObject;
JsonArr: TJsonArray;

begin
...
    JsonObj := TJSONObject.ParseJSONValue(AJsonString) as TJSONObject;
    if Assigned(JsonObj) then
    begin
      JsonArr := JonObj.Get('response').JsonValue as TJSONArray;
      // в массиве нумерация начинается с 0, можно узнать 
     // JsonArr.Size -кол-во элементов в массиве, и запихнуть все это в цикл и тому подобное
      name := (JsonArr.Get(0).JsonValue as  TJSONObject).Get('name').JsonValue.Value;
      id1 := (JsonArr.Get(0).JsonValue as  TJSONObject).Get('id1').JsonValue.Value;
      id2 := (JsonArr.Get(0).JsonValue as  TJSONObject).Get('id2').JsonValue.Value;
    end
в XE7 упростили и оптимизировали работу с JSON
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 07.02.2015, 14:00   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

ТС, изучайте что такое JSON, а то так и будите не знать что перед вами за структура и как её разобрать.
Человек_Борща вне форума Ответить с цитированием
Старый 07.02.2015, 14:04   #6
Dmitry33RU
Пользователь
 
Регистрация: 09.10.2014
Сообщений: 62
По умолчанию





Dmitry33RU вне форума Ответить с цитированием
Старый 07.02.2015, 14:16   #7
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию

Цитата:
Сообщение от VIK_aka_TOR Посмотреть сообщение
что-то подобное тогда
Получаю кучу ошибок
Цитата:
Сообщение от VIK_aka_TOR Посмотреть сообщение
в XE7 упростили и оптимизировали работу с JSON
у меня XE7
Изображения
Тип файла: png 2015-02-07_141429.png (10.0 Кб, 491 просмотров)
nibufep вне форума Ответить с цитированием
Старый 07.02.2015, 14:26   #8
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Цитата:
Сообщение от nibufep Посмотреть сообщение
Получаю кучу ошибок

у меня XE7
было бы неплохо увидеть что в тех строках
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 07.02.2015, 14:28   #9
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию

Цитата:
Сообщение от VIK_aka_TOR Посмотреть сообщение
было бы неплохо увидеть что в тех строках
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
JsonObj: TJSONObject;
JsonArr: TJsonArray;
id1, id2:string;
begin
    JsonObj := TJSONObject.ParseJSONValue(memo1.Text) as TJSONObject;
    if Assigned(JsonObj) then begin
      JsonArr := JsonObj.Get('response').JsonValue as TJSONArray;
      name := (JsonArr.Get(0).JsonValue as  TJSONObject).Get('name').JsonValue.Value;
      id1 := (JsonArr.Get(0).JsonValue as  TJSONObject).Get('id1').JsonValue.Value;
      id2 := (JsonArr.Get(0).JsonValue as  TJSONObject).Get('id2').JsonValue.Value;
    end
end;
nibufep вне форума Ответить с цитированием
Старый 07.02.2015, 14:39   #10
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

тогда так:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
JsonObj: TJSONObject;
JsonArr: TJsonArray;
id1, id2:string;
begin
    JsonObj := TJSONObject.ParseJSONValue(memo1.Text) as TJSONObject;
    try
    if Assigned(JsonObj) then begin
      JsonArr := JsonObj.Get('response').JsonValue as TJSONArray;
      name := (JsonArr.Get(0) as  TJSONObject).Get('name').JsonValue.Value;
      id1 := (JsonArr.Get(0) as TJSONObject).Get('id1').JsonValue.Value;
      id2 := (JsonArr.Get(0) as  TJSONObject).Get('id2').JsonValue.Value;
    end
    finally
      JsonObj.Free; // учитесь за собой убирать
    end;
end;
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с json AlexeyAl PHP 1 23.11.2014 16:56
C++ JSON qip2005 Visual C++ 2 05.11.2012 19:48
uJSON или работа с JSON массивами в Delphi wowsel Работа с сетью в Delphi 0 24.09.2011 02:10
Qt + Json Lindemann66 Qt и кроссплатформенное программирование С/С++ 0 18.08.2011 15:26
Работа с JSON Wayfer Работа с сетью в Delphi 3 09.07.2010 19:32