LoadJSONFromString

From SunFlurry wiki
Jump to: navigation, search
  LoadJSONFromString (Функции работы со строками)
Статус разработки: Частичная реализация
Тип:Функция
Обращение к БД:Нет
Исключения:Невозможно превратить в строку, число
Визуальность:Нет

Функция загружает часть текста или весь текст в формате JSON и возвращает его представление в виде объекта дерева или списка. Функция загружает текст JSON от начала строки до того, как системе встречается знак закрытия массива, идущий вне исходного уровня или какой-либо ошибочный знак. От начала строки текста, при этом, будет удалена загруженная подстрока. Таким образом, можно загружать очень большой текст, содержащий заранее известные элементы массива постепенно. Корректный текст JSON будет загружен полностью.

Комментарии по работе функции:

  • В создаваемых объектах функция также использует поле Check (как в дереве, так и в списках). Если это поле установлено, элемент включает массив ([...]), иначе включает объект ({...}). Такой подход необходим для корректной работы функции SaveJSONToString, так как без него система не отличить пустой объект {} от пустого массива [].
  • Булевский тип (true или false) будет загружен как текст "true" или "false". Поле Check этой ветки или элемента изменяется на 2, для того, чтобы этот объект можно было отличить от строки (если в этом есть необходимость).
  • Пустой тип (null) будет загружен как текст "null". Поле Check этой ветки или элемента изменяется на 3, для того, чтобы этот объект можно было отличить от строки.
  • Элементы массивов значений ([1,2,3]) будут добавлены как обычные объекты без имени.

Синтаксис

LoadJSONFromString(<Строка (STRING)>,<Тип возвращаемого объекта (INT)>=0):<Результат (TREE,LIST)>

Аргументы

  • <Строка (STRING)> - (возможен аргумент-переменная (ByRef)) Аргумент содержит строку в формате JSON. Если будет загружена только часть строки, в переменной аргумента будет возвращена незагруженная часть. Если строка загружается полностью (корректный объект JSON), в переменной аргумента будет возвращена пустая строка.
  • <Тип возвращаемого объекта (INT)> - (необязательный аргумент) Аргумент задает тип возвращаемого функцией объекта, и может принимать следующие значения:
    • 0 (по умолчанию): Функция возвратит объект дерева.
    • 1: Функция возвратит объект списка, который будет содержать другие списки, представляющие массивы исходного объекта JSON.

Возвращаемое значение

Будет возвращен либо объект дерева, либо объект списка, в зависимости от значения второго аргумента.

Примеры

//Загрузка простого объекта JSON
Стр:=FileToString("C:\Temp\Object.json",65001);
aTree:=LoadJSONFromString(Стр,0);
aBr:=aTree["Результат","Вложения"];
Message("Файлы ветки Вложения:");
If _And(TypeStr(aBr)="TREE.BRANCH",aBr.Size()>0) Then
  For i:=1 to aBr.Size() Do
    Message("Файл вложения: "+aBr[i,"Файл","Имя"]);
  EndDo;
EndIf;
//Загрузка JSON по этапам
Стр:="{""Вложения"":[{""Файл"":{""Имя"":""Файл1"",""Тип"":0},""Удален"":0},{""Файл"":{""Имя"":""Файл2"",""Тип"":1},""Удален"":1},{""Файл"":{""Имя"":""Файл3"",""Тип"":2},""Удален"":0}]}";
TearStr(Стр,"{""Вложения"":[");
While Стр<>"" Do
  aTree:=LoadJSONFromString(Стр,0);
  //Загрузка остановится на знаке ","
  TearStr(Стр,",");
  If aTree.Size()>0 Then
    Message("Файл: "+aTree["Файл","Имя"]);
  EndIf;
EndDo;
//Будет выведено: 
//Файл: Файл1
//Файл: Файл2
//Файл: Файл3