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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2016, 20:59   #1
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию Работа с JSON (System.JSON)

Добрый день!

Имеется JSON код:

Код:
{
  "name1": [
    {
      "name": "blablalba",
      "status": "statusOK"
    },
    {
      "name": "blablalba",
      "status": "statusNeOK"
    }
  ],
  "name2": [
    {
      "name": "blablalba",
      "status": "statusOK"
    },
    {
      "name": "blablalba",
      "status": "statusNeOK"
    }
  ]
}
Delphi код:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  JSON: TJSONObject;
  JSONArray: TJSONArray;
  i, j: Integer;
begin
  JSON := TJSONObject.ParseJSONValue(Memo1.Lines.Text) as TJSONObject;
  JSONArray := TJSONArray(JSON.Get('name1').JsonValue);
  for i := 0 to JSONArray.Count - 1 do
  begin
    for j := 0 to TJSONArray(JSONArray.Items[i]).Count - 1 do
    begin
      Memo2.Lines.Add(TJSONPair(TJSONArray(JSONArray.Items[i]).Items[j]).JsonValue.Value);
    end;
    Memo2.Lines.Add('_____________');
  end;
end;
Вопрос такой: мне допустим нужно из "name1" получить все массивы со статусом "statusOK", это можно сделать только перебирая весь массив циклом и проверять через if ? Или можно сделать как-то проще ?
nibufep вне форума Ответить с цитированием
Старый 19.04.2016, 17:53   #2
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию

Помогите с записью. Вот так работает если массив "name1" уже есть, но если он не создан то вылазит ошибка, как проверить его отсутствие и создать?

Код:
  jsobj := TJSONObject.ParseJSONValue(Memo1.Lines.Text) as TJSONObject;
  jsa := TJSONArray(jsobj.Get('name1').JsonValue);

  jso := TJsonObject.Create();
  jso.AddPair(TJsonPair.Create('name', '1_1'));
  jso.AddPair(TJsonPair.Create('status', '1_2_2'));
  jsa.AddElement(jso);

  jso := TJsonObject.Create();
  jso.AddPair(TJsonPair.Create('name', 'x_x'));
  jso.AddPair(TJsonPair.Create('status', 'x_y_y'));
  jsa.AddElement(jso);

  with TStringList.Create do
  begin
    Text := jsObj.ToJSON;
    SaveToFile('1.json');
    Free;
  end;
nibufep вне форума Ответить с цитированием
Старый 19.04.2016, 18:05   #3
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию

Правильно ли будет сделать так?

Код:
  jsa := jsobj.GetValue('name1') as TJSONArray;

  if not (assigned(jsa)) then
  begin
    jsa := TJsonArray.Create();
    jsp := TJSONPair.Create('name1', jsa);
    jsObj.AddPair(jsp);
  end;
nibufep вне форума Ответить с цитированием
Старый 19.04.2016, 18:21   #4
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Почитайте про try..except
Код:
try
jsa := jsobj.GetValue('name1');
except
jsa := TJsonArray.Create();
...
end;
kropotkina-alice вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JSON Exception [org.apache.json] spectrum988 Помощь студентам 3 11.12.2015 09:25
Работа с JSON nibufep Общие вопросы Delphi 9 07.02.2015 14:39
Работа с json AlexeyAl PHP 1 23.11.2014 16:56
uJSON или работа с JSON массивами в Delphi wowsel Работа с сетью в Delphi 0 24.09.2011 02:10
Работа с JSON Wayfer Работа с сетью в Delphi 3 09.07.2010 19:32