Ofline
Введение в JSON и использование его в RadStudio Delphi или C ++ Builder.
[ОБНОВЛЕНИЕ] Для получения более полного примера создания клиентского сервиса RESTful с помощью Delphi и службы RESTful JSON с использованием PHP, просмотрите видеоролик « Жестокий ролик вашего собственного бэкэнд»!
Что такое JSON?
JSON (JavaScript Object Notation) - популярный формат для инкапсуляции структурированных данных. Если вы знакомы с XML, вы можете рассматривать JSON как выполняющую ту же работу, но эти два очень разные.
Название JSON может привести к некоторой путанице, это язык. Причиной этого является JSON, который является JavaScript, а JavaScript отключен.
Некоторые из привлекательных свойств формата JSON включают:
Структура JSON
JSON - лучший способ понять ситуацию. Для получения большей точности и подробностей обратитесь к документу стандартов JSON RFC-7159 .
Давайте посмотрим пример некоторых JSON:
{
«Книга»: {
«Название»: «zen»,
«Субтитры»: «и искусство обслуживания мотоциклов»,
«Автор»: «Роберт М. Пирсиг»,
«Isbn»: «9780061908019»
}
}
Пары ...
Мы можем видеть пример нескольких атрибутов книги, инкапсулированной в JSON.Каждая часть данных дается как пара имени и значения, разделенная двоеточием.
«Имя»: «значение»
ЕС
"Название": "zen"
Мы будем называть эту часть данных парой. Имя и значение пары заключаются в кавычки. Мы можем иметь столько пар, сколько хотим.
Разработчики приложений баз данных могут подумать о паре как поле или столбце.
Объекты ...
Вы можете видеть, что наши пары окружены фигурными скобками и вверху.
«Книга»: {
....
}
Хотя это может выглядеть как пара, правая часть не имеет значения, заключенного в кавычки, но вместо этого она имеет открытую скобку, несколько пар, а затем замыкающую фигуру. Эта структура называется объектом. (Обозначения JavaScript OBJECT)
Объектом в этом случае является совокупность пар. Как видно из примера, этот объект называется «книга» и содержит несколько пар, содержащих описательные атрибуты книги.
Объекты также могут быть, мы увидим позже. Прямо сейчас, мы уже видим пример вложенности из-за того, что наш объект «книга» уже заключен в скобки, эти внешние фигурные скобки. Этот объект должен присутствовать на других объектах.
Разработчики приложений баз данных могут подумать о том, что объект является записью или строкой, где вложенность формирует отношения между ними.
Несколько объектов ...
Что делать, если мы хотим инкапсулировать несколько объектов? Ну, вы можете сделать это очень просто, разделив объекты запятой. Вот такой же пример сверху, но на этот раз содержащий две книги ...
{
«Книга-1»: {
«Название»: «zen»,
«Субтитры»: «и искусство обслуживания мотоциклов»,
«Автор»: «Роберт М. Пирсиг»,
«Isbn»: «9780061908019»
},
«Книга-2»: {
«Название»: «Кодирование в Delphi»,
"Subtitle": "",
«Автор»: «Ник Ходжес»,
«Исбн»: «978-1941266038»
}
}
В этом примере у меня есть две книги под названием «book-1» и «book-2». Они разделены запятой и являются двумя совершенно разными объектами. Мне пришлось переименовать их, потому что они были бы названы «книгой». Хотя я бы дал одно и то же имя, это будет плохая структура данных, потому что «книга» - это не тип объекта, а имя объекта. Если у меня есть два объекта с именем «книга», у меня нет способа рассказать им обособленно!
К счастью, мы можем представлять несколько объектов (одного типа или иначе) с помощью массива ...
Массивы ...
Пример с несколькими книгами выше
{
«Книги»: [
{
«Название»: «zen»,
«Субтитры»: «и искусство обслуживания мотоциклов»,
«Автор»: «Роберт М. Пирсиг»,
«Isbn»: «9780061908019»
},
{
«Название»: «Кодирование в Delphi»,
"Subtitle": "",
«Автор»: «Ник Ходжес»,
«Исбн»: «978-1941266038»
}]
}
В этом примере вы можете видеть, что мы можем представлять несколько неименованных объектов, разделенных квадратными скобками []. Вот как мы представляем массив объектов данных и для хорошей формы.
Давайте посмотрим, что в колесной студии.
JSON, Object, Pair и Array. Как разработчики Delphi, так и C ++ дали классы с именем «TJSONObject», «TJSONPair», «TJSONArray» соответственно. В следующем примере мы собираемся использовать эти три класса для создания образца JSON, на который мы только что посмотрели.
{
«Книги»: [
{
«Название»: «zen»,
«Субтитры»: «и искусство обслуживания мотоциклов»,
«Автор»: «Роберт М. Пирсиг»,
«Isbn»: «9780061908019»
},
{
«Название»: «Кодирование в Delphi»,
"Subtitle": "",
«Автор»: «Ник Ходжес»,
«Исбн»: «978-1941266038»
}]
}
Давайте напишем некоторый код для создания этой структуры.
В своем выборе Delphi или C ++ Builder вы начинаете с нового приложения и бросаете кнопку и напоминание в своей основной форме.
(VCL или FMX в порядке, я использую VCL)
Теперь использует / включает блок JSON
Объект Паскаль:
Добавить событие OnClick ...
Теперь запустите приложение и нажмите кнопку. Ваша записка должна быть заполнена фрагментом JSON, как и ожидалось.
{«Книги»: [{«title»: «Zen», «подзаголовок» и искусство обслуживания мотоциклов ». Название ":" Кодирование в Delphi "," подзаголовок ":" "," автор ":" Ник Ходжес "," isbn ":" 978-1941266038 "}]}
О, и все это сгруппировано и уродливое. Если вы хотите взглянуть на него, вы можете прочитать его здесь.
Возможно, вы заметили что-то необычное в коде. Когда мы добавляем массив книг к внешнему объекту JSON, мы добавляем его как пару. Почему? Ну из-за массива это тип пары, с именем слева и массивом данных в качестве значения справа. Таким образом, TJSONArray вырывается из TJSONPair. На самом деле даже объект представляет собой пару.
Разбор строк JSON.
Теперь, когда мы рассмотрели, как создавать строки JSON, давайте посмотрим на обратное. Давайте возьмем наш код JSON и проанализируем его обратно в структуру, которую мы можем читать из кода ...
Снимите вторую кнопку в вашей форме и добавьте следующий код в это событие OnClick.
Теперь запустите приложение и нажмите кнопку button1 и button2 подряд.
Вам будет представлена серия сообщений, содержащих значения двух записей книги.
Теперь у вас есть пример построения и потребления данных JSON, продвижения вперед и обозначения ваших объектов.
[ОБНОВЛЕНИЕ] Для получения более полного примера создания клиентского сервиса RESTful с помощью Delphi и службы RESTful JSON с использованием PHP, просмотрите видеоролик « Жестокий ролик вашего собственного бэкэнд»!
Что такое JSON?
JSON (JavaScript Object Notation) - популярный формат для инкапсуляции структурированных данных. Если вы знакомы с XML, вы можете рассматривать JSON как выполняющую ту же работу, но эти два очень разные.
Название JSON может привести к некоторой путанице, это язык. Причиной этого является JSON, который является JavaScript, а JavaScript отключен.
Некоторые из привлекательных свойств формата JSON включают:
- Он читается человеком. Использование JSON - это те дни, когда мы собирали двоичные данные в пакеты с кодировкой и декодированием на каждом конце.JSON записывается как текст, либо в ASCII, либо в текстовом формате Unicode.
- Это легкий вес. Это верно в том, что это легкий вес. Это связано с тем, что JSON несет в себе множество «отступов» в виде тегов. JSON по-прежнему является более тяжелым, чем нечитаемый метод инкапсуляции, поскольку он является текстом и часто кодируется в формате Unicode переменной длины.
- Это поддерживается повсюду. JSON сначала поддерживается везде, где JavaScript (что означает, по крайней мере, каждый поддерживающий HTML5 браузер), и только что перешел с C # на C ++ и Delphi.
- Это легко разобрать. Вероятно, самым большим вкладом в его принятие вне JSON является синтаксический анализ.
Структура JSON
JSON - лучший способ понять ситуацию. Для получения большей точности и подробностей обратитесь к документу стандартов JSON RFC-7159 .
Давайте посмотрим пример некоторых JSON:
{
«Книга»: {
«Название»: «zen»,
«Субтитры»: «и искусство обслуживания мотоциклов»,
«Автор»: «Роберт М. Пирсиг»,
«Isbn»: «9780061908019»
}
}
Пары ...
Мы можем видеть пример нескольких атрибутов книги, инкапсулированной в JSON.Каждая часть данных дается как пара имени и значения, разделенная двоеточием.
«Имя»: «значение»
ЕС
"Название": "zen"
Мы будем называть эту часть данных парой. Имя и значение пары заключаются в кавычки. Мы можем иметь столько пар, сколько хотим.
Разработчики приложений баз данных могут подумать о паре как поле или столбце.
Объекты ...
Вы можете видеть, что наши пары окружены фигурными скобками и вверху.
«Книга»: {
....
}
Хотя это может выглядеть как пара, правая часть не имеет значения, заключенного в кавычки, но вместо этого она имеет открытую скобку, несколько пар, а затем замыкающую фигуру. Эта структура называется объектом. (Обозначения JavaScript OBJECT)
Объектом в этом случае является совокупность пар. Как видно из примера, этот объект называется «книга» и содержит несколько пар, содержащих описательные атрибуты книги.
Объекты также могут быть, мы увидим позже. Прямо сейчас, мы уже видим пример вложенности из-за того, что наш объект «книга» уже заключен в скобки, эти внешние фигурные скобки. Этот объект должен присутствовать на других объектах.
Разработчики приложений баз данных могут подумать о том, что объект является записью или строкой, где вложенность формирует отношения между ними.
Несколько объектов ...
Что делать, если мы хотим инкапсулировать несколько объектов? Ну, вы можете сделать это очень просто, разделив объекты запятой. Вот такой же пример сверху, но на этот раз содержащий две книги ...
{
«Книга-1»: {
«Название»: «zen»,
«Субтитры»: «и искусство обслуживания мотоциклов»,
«Автор»: «Роберт М. Пирсиг»,
«Isbn»: «9780061908019»
},
«Книга-2»: {
«Название»: «Кодирование в Delphi»,
"Subtitle": "",
«Автор»: «Ник Ходжес»,
«Исбн»: «978-1941266038»
}
}
В этом примере у меня есть две книги под названием «book-1» и «book-2». Они разделены запятой и являются двумя совершенно разными объектами. Мне пришлось переименовать их, потому что они были бы названы «книгой». Хотя я бы дал одно и то же имя, это будет плохая структура данных, потому что «книга» - это не тип объекта, а имя объекта. Если у меня есть два объекта с именем «книга», у меня нет способа рассказать им обособленно!
К счастью, мы можем представлять несколько объектов (одного типа или иначе) с помощью массива ...
Массивы ...
Пример с несколькими книгами выше
{
«Книги»: [
{
«Название»: «zen»,
«Субтитры»: «и искусство обслуживания мотоциклов»,
«Автор»: «Роберт М. Пирсиг»,
«Isbn»: «9780061908019»
},
{
«Название»: «Кодирование в Delphi»,
"Subtitle": "",
«Автор»: «Ник Ходжес»,
«Исбн»: «978-1941266038»
}]
}
В этом примере вы можете видеть, что мы можем представлять несколько неименованных объектов, разделенных квадратными скобками []. Вот как мы представляем массив объектов данных и для хорошей формы.
Давайте посмотрим, что в колесной студии.
JSON, Object, Pair и Array. Как разработчики Delphi, так и C ++ дали классы с именем «TJSONObject», «TJSONPair», «TJSONArray» соответственно. В следующем примере мы собираемся использовать эти три класса для создания образца JSON, на который мы только что посмотрели.
{
«Книги»: [
{
«Название»: «zen»,
«Субтитры»: «и искусство обслуживания мотоциклов»,
«Автор»: «Роберт М. Пирсиг»,
«Isbn»: «9780061908019»
},
{
«Название»: «Кодирование в Delphi»,
"Subtitle": "",
«Автор»: «Ник Ходжес»,
«Исбн»: «978-1941266038»
}]
}
Давайте напишем некоторый код для создания этой структуры.
В своем выборе Delphi или C ++ Builder вы начинаете с нового приложения и бросаете кнопку и напоминание в своей основной форме.
(VCL или FMX в порядке, я использую VCL)
Теперь использует / включает блок JSON
Объект Паскаль:
Код:
uses[/B][/I]
[B]
[I] System.JSON;
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
o: TJSONObject;
a: TJSONArray;
book: TJSONObject;
begin
// Create the outer JSON object which parents the others.
o := TJSONObject.Create;
try
// Create the books object, which contains the array of books...
a := TJSONArray.Create();
// add the array to the object.
o.AddPair('books',a);
// Create the first book
book := TJSONObject.Create;
book.AddPair( TJSONPair.Create('title','Zen') );
book.AddPair( TJSONPair.Create('subtitle','and The art of motorcycle maintenance.') );
book.AddPair( TJSONPair.Create('author','Robert M Pirsig') );
book.AddPair( TJSONPair.Create('isbn','9780061908019') );
// Add the book to the array
a.AddElement(book);
// Create the second book
book := TJSONObject.Create;
book.AddPair( TJSONPair.Create('title','Coding in Delphi') );
book.AddPair( TJSONPair.Create('subtitle','') );
book.AddPair( TJSONPair.Create('author','Nick Hodges') );
book.AddPair( TJSONPair.Create('isbn','978-1941266038') );
// Add the book to the array
a.AddElement(book);
finally
Memo1.Lines.Text := o.ToString;
o.Free;
end;
end;
Теперь запустите приложение и нажмите кнопку. Ваша записка должна быть заполнена фрагментом JSON, как и ожидалось.
{«Книги»: [{«title»: «Zen», «подзаголовок» и искусство обслуживания мотоциклов ». Название ":" Кодирование в Delphi "," подзаголовок ":" "," автор ":" Ник Ходжес "," isbn ":" 978-1941266038 "}]}
О, и все это сгруппировано и уродливое. Если вы хотите взглянуть на него, вы можете прочитать его здесь.
Возможно, вы заметили что-то необычное в коде. Когда мы добавляем массив книг к внешнему объекту JSON, мы добавляем его как пару. Почему? Ну из-за массива это тип пары, с именем слева и массивом данных в качестве значения справа. Таким образом, TJSONArray вырывается из TJSONPair. На самом деле даже объект представляет собой пару.
Разбор строк JSON.
Теперь, когда мы рассмотрели, как создавать строки JSON, давайте посмотрим на обратное. Давайте возьмем наш код JSON и проанализируем его обратно в структуру, которую мы можем читать из кода ...
Снимите вторую кнопку в вашей форме и добавьте следующий код в это событие OnClick.
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
o: TJSONObject;
a: TJSONArray;
book: TJSONObject;
idx: integer;
idy: integer;
begin
o := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(Memo1.Lines.Text),0) as TJSONObject;
try
a := TJSONArray(o.Get('books').JsonValue);
for idx := 0 to pred(a.size) do begin
book := TJSONObject(a.Get(idx));
for idy := 0 to pred(book.Count) do begin
ShowMessage( book.Pairs[idy].JsonString.ToString + ':' + book.Pairs[idy].JsonValue.ToString );
end;
end;
finally
o.Free;
end;
end;
Теперь запустите приложение и нажмите кнопку button1 и button2 подряд.
Вам будет представлена серия сообщений, содержащих значения двух записей книги.
Теперь у вас есть пример построения и потребления данных JSON, продвижения вперед и обозначения ваших объектов.