1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/afrusrsc-superobject

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
README.md 7.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 13.03.2025 07:37 df85f9b

Исходный проект больше не поддерживается, теперь поддерживаю свою ветку.

Исходный проект: superobject---> ## Этот проект больше не поддерживается!

SuperObject

Что такое JSON?

  • JSON (JavaScript Object Notation) — это легкий формат обмена данными.
  • Он легко читаем и записывается человеком.
  • Он легко парсируется и генерируется машиной.
  • Он основан на подмножестве языка программирования JavaScript, стандарта ECMA-262 3-го издания — декабря 1999 года.
  • JSON — это текстовый формат, полностью независимый от языка, но использующий конвенции, знакомые программистам.
  • Эти свойства делают JSON идеальным форматом обмена данными.
  • Вы можете получить больше информации на json.org.
{
  "name": "Jon Snow", /* это комментарий */
  "dead": true,
  "telephones": ["000000000", "111111111111"],
  "age": 33,
  "size": 1.83,
  "addresses": [
    {
      "address": "foo",
      "city": "The Wall",
      "zip": 57000
    },
    {
      "address": "foo",
      "city": "Winterfell",
      "zip": 44000
    }
  ]
}

Парсинг структуры данных JSON

var
  obj: ISuperObject;
begin
  obj := SO('{"foo": true}');
  obj := TSuperObject.ParseString('{"foo": true}');
  obj := TSuperObject.ParseStream(Stream);
  obj := TSuperObject.ParseFile(FileName);
end;

Доступ к данным

Для каждого поддерживаемого типа данных нет отдельной структуры данных. Все они являются объектами: ISuperObject.

  val := obj.AsString;
  val := obj.AsInteger;
  val := obj.AsBoolean;
  val := obj.AsDouble;
  val := obj.AsArray;
  val := obj.AsObject;
  val := obj.AsMethod;

Как прочитать значение свойства объекта?

  val := obj.AsObject.S['foo']; // получить строку
  val := obj.AsObject.I['foo']; // получить Int64
  val := obj.AsObject.F['foo']; // получить число с плавающей запятой
  val := obj.AsObject.B['foo']; // получить булево значение
  val := obj.AsObject.A['foo']; // получить массив
  val := obj.AsObject.O['foo']; // получить объект
``````javascript

B['foo']; // получить логическое значение val := obj.AsObject.D['foo']; // получить число с плавающей запятой val := obj.AsObject.O['foo']; // получить объект (по умолчанию) val := obj.AsObject.M['foo']; // получить метод val := obj.AsObject.N['foo']; // получить пустое значение


## Как прочитать значение из массива?

```pascal
// продвинутый способ
val := obj.AsArray.S[0]; // получить строку
val := obj.AsArray.I[0]; // получить Int64
val := obj.AsArray.B[0]; // получить логическое значение
val := obj.AsArray.D[0]; // получить число с плавающей запятой
val := obj.AsArray.O[0]; // получить объект (по умолчанию)
val := obj.AsArray.M[0]; // получить метод
val := obj.AsArray.N[0]; // получить пустое значение

Использование путейИспользование путей является очень продуктивным способом для поиска объекта, когда вы знаете его расположение.

Это некоторые случаи использования:

obj['foo']; // получает свойство
obj['123']; // получает элемент массива
obj['foo.list']; // получает свойство из объекта
obj['foo[123]']; // получает элемент массива из объекта
obj['foo(1,2,3)']; // вызывает метод
obj['foo[]'] := значение; // добавляет элемент массива

Вы также можете использовать вложенные пути:

obj := so('{"index": 1, "items": ["item 1", "item 2", "item 3"]}');
obj['items[index]'] // возвращает "item 2"

или создать новую структуру данных из другой:

obj := so('{"index": 1, "items": ["item 1", "item 2", "item 3"]}');
obj['{"item": items[index], "index": index}'] // возвращает {"item": "item 2", "index": 1}

Обзор структуры данных

Использование перечислителя Delphi.

Используя перечислитель Delphi, можно просматривать значения элементов массива или объекта-свойства одним и тем же образом.

var
  item: ISuperObject;
begin
  for item in obj['items'] do . . .

Вы также можете просматривать ключи и значения объекта следующим образом:

var
  item: TSuperAvlEntry;
begin
  for item in obj.AsObject do . . .
  begin
    item.Name;
    item.Value;
  end;

Обзор свойств объекта без перечислителя

var
  item: TSuperObjectIter;
begin
  if ObjectFindFirst(obj, item) then
  repeat
    item.key;
    item.val;
  until not ObjectFindNext(item);
  ObjectFindClose(item);

Обзор элементов массива без перечислителя

var
  item: Integer;
begin
  for item := 0 to obj.AsArray.Length - 1 do
    obj.AsArray[item];
```## RTTI и маршалинг в Delphi 2010

```pascal
type
  TData = record
    str: string;
    int: Integer;
    bool: Boolean;
    flt: Double;
  end;
var
  ctx: TSuperRttiContext;
  data: TData;
  obj: ISuperObject;
begin
  ctx := TSuperRttiContext.Create;
  try
    data := ctx.AsType<TData>(SO('{str: "foo", int: 123, bool: true, flt: 1.23}'));
    obj := ctx.AsJson<TData>(data);
  finally
    ctx.Free;
  end;
end;

Сохранение данных

obj.SaveTo(stream);
obj.SaveTo(filename);

Вспомогательные функции

SO(['prop1', true, 'prop2', 123]); // возвращает объект {"prop1": true, "prop2": 123}
SA([true, 123]); // возвращает массив [true, 123]

Неканонические формы

Объект SuperObject способен парсить неканонические формы.

// неотмеченные идентификаторы
SO('{foo: true}');
// незакрывающиеся или неотмеченные строки
SO('{собственность: bla bla bla}');
// шестнадцатеричные значения
SO('{foo: \xFF}');

Донат автору

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/afrusrsc-superobject.git
git@api.gitlife.ru:oschina-mirror/afrusrsc-superobject.git
oschina-mirror
afrusrsc-superobject
afrusrsc-superobject
master