Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/104: Рейтинг темы: голосов - 104, средняя оценка - 4.79
27 / 27 / 8
Регистрация: 02.10.2014
Сообщений: 151
1

Парсинг JSON

21.02.2015, 12:04. Показов 18789. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
HTML5
1
{"news":[{"time":"25.11.2014","link":"http:\/\/aion.\/?p=58","description":"Уважаемые игроки сервера AION.в честь нашего скорого юбилея всем игрокам в онлайне 15.12.2014 будут выданы ценные призы!\r\nСпасибо что остаётесь с нами. С уважением Bumer!","title":"Нам 5 лет!"},{"time":"08.11.2014","link":"http:\/\/aion.\/?p=50","description":"<span style=\"font-size: medium;\">Всем персонажам прокачавшим свой уровень до:<\/span>\r\n<div><\/div>\r\n<div><a href=\"http:\/\/aion..\/bonus.php\">Подробнее на нашем форуме<\/a><\/div>","title":"Внимание Бонусы!"},{"time":"08.11.2014","link":"http:\/\/aion.\/?p=47","description":"Читать о новых рейтах сервера на нашем форуме\r\nИмеются ВИП и ПРЕМИУМ аккаунты","title":"Рейты сервера"},{"time":"08.11.2014","link":"http:\/\/aion.\/?p=44","description":"Пофикшена большая часть квестов Северного, Южного и Подземного Каталама!\r\n\r\nИсправлены нейтральные зоны\r\n\r\nИдеально по оффу работают все существующие РБ и именные мобы","title":"Глобальное Обновление сервера!"},{"time":"08.11.2014","link":"http:\/\/aion.\/?p=40","description":"Скачать расширение\r\nУстановка\r\n\r\n\r\nРаспакуйте папку \r\nЗайдите в КЛЮЧ –> Инструменты –> Расширения","title":"Расширение Aion.для браузера Google-Chrome"},{"time":"08.11.2014","link":"http:\/\/aion.\/?p=36","description":"Ув. игроки мы приобрели доменное имя <a href=\"http:\/\/aion.\/\">aion.<\/a> теперь вы можете заходить на наш сайт по двум адресам <a href=\"http:\/\/aion..\/\">aion..<\/a>  и <a href=\"http:\/\/aion.\/\">aion.<\/a>","title":"Aion."},{"time":"08.11.2014","link":"http:\/\/aion.\/?p=31","description":"У кого выходит такая ошибка скачиваем патч  Скачать патч","title":"Ни один игровой сервер не был закреплен за сервером авторизации(6)"}],"server":{"login":true,"game":true,"online":"26"},"player":{"name":"Рамон","img":"http:\/\/aion.\/img\/sniper.png","ap":"15678171"}}
Надо спарсить все новости в таком виде :
25.11.2014
Нам 5 лет!
Уважаемые игроки сервера
Ссылка.
----
08.11.2014
Внимание Бонусы!
Всем персонажам прокачавшим..
Ссылка.
И т.д


Помогите пожалуйста.. еще не разу не сталкивался с JSON.. -
Юзал поиск и т.п, но у меня не получается разбиратся ни с TJSONObject , ни с superobject..
Покажите как мне спарсить мои данные .. Спасибо вам за ранее!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.02.2015, 12:04
Ответы с готовыми решениями:

Парсинг Json
Здравствуйте, нужна помощь. Как получить значения ask. ...

Парсинг Json
В общем мне нужно получить из json &quot;body&quot;: {&quot;response&quot;: {&quot;history&quot;:...

Парсинг JSON
Имеется...

Парсинг JSON
Данный код выдает ошибку &quot;access violation at address 008d4b2c&quot; var s : string; Json:...

7
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
21.02.2015, 14:58 2
не получается разобраться - разберитесь за меня?
обе библиотеки очень подробно, с примерами, описаны в интернете
следовательно и не пробовал ничего делать

одно дело - помочь исправить ошибки, другое дело - напишите мне...
первое - помощь, второе - работа. работа предполагает оплату
1
27 / 27 / 8
Регистрация: 02.10.2014
Сообщений: 151
21.02.2015, 16:43  [ТС] 3
не получается разобраться - разберитесь за меня?
обе библиотеки очень подробно, с примерами, описаны в интернете
следовательно и не пробовал ничего делать
Я вас прекрасно понимаю, вы думайте что я ничего не умею и хочу взять готовый код! но это не так..
Я сначала хотел обычном методом парсить данные но что та не так сделал или где та намудрил.. в
место того чтобы пройтись по страничке и спарсить данные проц начал загружаться и прочие фокусы..


Потом в сайбер форуме взял 2 примера, но с ними не получается разбиратся..
И вообщем, если у вас нет желании помочь можете и не флудить в теме...

Добавлено через 13 минут
Прошу прошения за грубость.. но уже нервы в пределе..
Вот как я попытался спарсить и в итоге проц и память загружался..
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//в InfoApi находится код что выше
try
while Pos('{"time":', InfoApi.Text) <> 0 do
Begin
s1:=pars('{"t',InfoApi.Text,'},');
time:=pars('ime":"',s1,'"');
tittle:=pars('"title":"',s1,'"');
desc:=pars('"description":"',s1,'"');
link:=pars('"link":"',s1,'",');
Link:=StringReplace(link, '/', '', [rfReplaceAll]);
desc:=StringReplace(link, '\r\n', #13, [rfReplaceAll]);
News.Add(time);
News.Add(tittle);
News.Add(desc);
News.Add(link);
News.Add('- - - -');
End;
 
except
end;
А этот код тут взял.. но не могу разбиратся..
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//В мемо1 находится код что выше
var
  s: string;
  Json: TJSONObject;
  jRev: TJSONValue;
  jArr, entry: TJSONArray;
  i, j: Integer;
begin
  Json := TJSONObject.ParseJSONValue(s) as TJSONObject;
  jArr := Json.Get('news').JsonValue as TJSONArray;
  for i := 0 to Pred(jArr.Size) do
  begin
    Memo1.Lines.Add('time #' + IntToStr(i + 1));
    entry := (jArr.Get(i) as TJSONObject).Get('time').JsonValue as TJSONArray;
 
    for j := 0 to Pred(entry.Size) do
    begin
      Memo1.Lines.Add((entry.Get(j) as TJSONObject).Get('time').JsonValue.value);
      Memo1.Lines.Add('=> time');
 
      for jRev in TJSONArray((entry.Get(j) as TJSONObject).Get('time').JsonValue) do
        Memo1.Lines.Add(jRev.value)
    end;
  end;
end;
//В итоге получаю access violation at address
Прошу если не хотите помочь, проигнорируйте тему!
1
226 / 225 / 112
Регистрация: 20.10.2013
Сообщений: 808
21.02.2015, 18:40 4
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure ParseMyJSON(Memo: TMemo);
var
  JSON: TJSONObject;
  JSONArray: TJSONArray;
  i, j: Integer;
begin
  JSON := TJSONObject.ParseJSONValue(Memo.Lines.Text) as TJSONObject;
  Memo.Clear;
  JSONArray := TJSONArray(JSON.Get('news').JsonValue);
  for i := 0 to JSONArray.Count - 1 do
  begin
    for j := 0 to TJSONArray(JSONArray.Items[i]).Count - 1 do
      Memo.Lines.Add(TJSONPair(TJSONArray(JSONArray.Items[i]).Items[j]).JsonValue.Value);
    Memo.Lines.Add('----------------------');
  end;
end;
1
27 / 27 / 8
Регистрация: 02.10.2014
Сообщений: 151
21.02.2015, 18:47  [ТС] 5
nestquik2, спасибо! но ругается на JSONArray
TJSONArray does not contain a member named 'Count' at Line

[dcc32 Error] Unit2.pas(42): E2003 Undeclared identifier: 'Count'
[dcc32 Error] Unit2.pas(44): E2003 Undeclared identifier: 'Items'
[dcc32 Error] Unit2.pas(45): E2003 Undeclared identifier: 'Items'

У вас в uses что стоить ? У меня DBXJSON.. //Embarcadero Delphi XE3
0
226 / 225 / 112
Регистрация: 20.10.2013
Сообщений: 808
21.02.2015, 19:00 6
Лучший ответ Сообщение было отмечено Insendio как решение

Решение

Ну это я просто живу в "новом веке" (Delphi XE7) там JSON уже "с коробки" (System.JSON) идет.
Поэтому придется переписать Count на Size, а Items на Get. Будет выглядеть так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure ParseMyJSON(Memo: TMemo);
var
  JSON: TJSONObject;
  JSONArray: TJSONArray;
  i, j: Integer;
begin
  JSON := TJSONObject.ParseJSONValue(Memo.Lines.Text) as TJSONObject;
  Memo.Clear;
  JSONArray := TJSONArray(JSON.Get('news').JsonValue);
  for i := 0 to JSONArray.Size - 1 do
  begin
    for j := 0 to TJSONArray(JSONArray.Get(i)).Size - 1 do
      Memo.Lines.Add(TJSONPair(TJSONArray(JSONArray.Get(i)).Get(j)).JsonValue.Value);
    Memo.Lines.Add('----------------------');
  end;
end;
А еще можно избавиться от 2 цикла, и расставить в нужном Вам порядке:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure ParseMyJSON(Memo: TMemo);
var
  JSON: TJSONObject;
  JSONArray: TJSONArray;
  i: Integer;
begin
  JSON := TJSONObject.ParseJSONValue(Memo.Lines.Text) as TJSONObject;
  Memo.Clear;
  JSONArray := TJSONArray(JSON.Get('news').JsonValue);
  for i := 0 to JSONArray.Size - 1 do
  begin
    Memo.Lines.Add(TJSONPair(TJSONObject(JSONArray.Get(i)).Get('time')).JsonValue.Value);
    Memo.Lines.Add(TJSONPair(TJSONObject(JSONArray.Get(i)).Get('title')).JsonValue.Value);
    Memo.Lines.Add(TJSONPair(TJSONObject(JSONArray.Get(i)).Get('description')).JsonValue.Value);
    Memo.Lines.Add(TJSONPair(TJSONObject(JSONArray.Get(i)).Get('link')).JsonValue.Value);
    Memo.Lines.Add('----------------------');
  end;
end;
2
27 / 27 / 8
Регистрация: 02.10.2014
Сообщений: 151
21.02.2015, 19:02  [ТС] 7
Спасибо вам большое!)
Код рабочий на 200%
Дай Бог вам здоровья))))
0
krapotkin
22.02.2015, 15:52     Парсинг JSON
  #8

Не по теме:

правильно сформулированный вопрос получил хороший ответ

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.02.2015, 15:52

Парсинг JSON из TMemo
Всех с Новым Годом! Доброго времени суток. Ребят подскажите. Делаю запрос. Результат гружу в TMemo....

Парсинг JSON в Delphi
Добрый день. Знаю что это тема освещалась уже несколько раз, но все что мог найти, это библиотеки...

Delphi - Парсинг JSON
Добрый день. Не получается распарсить. вылетает на строчке JSONArray :=...

Парсинг JSON, реально ли?
Реально ли парсить JSON? С помощью чего и как, обьясните пожалуйста. Спасибо.

Парсинг JSON. (X-SuperObject)
Delphi XE8. Для парсинга использовал X-SuperObject. Получаю JSON ответ от VK. Выдернуть...

Парсинг JSON и вывод в Label
Принцип &gt; 1) Кнопка &quot;Отправить&quot;: Отправленный POST запрос вывожу в Memo 2) Кнопка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru