SaveJSONToString
Revision as of 08:29, 17 July 2022 by 1>Admin
| SaveJSONToString (Функции работы со строками) | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||
Функция экспортирует (превращает) объект дерева, ветки или списка в текст JSON. Функция позволяет восстановить JSON документ из объекта, который обмено создается с помощью функции LoadJSONFromString. Обычно необходимо модифицировать объект перед превращением его в текст, при модификации (удалении или добавлении веток или списков) нужно руководствоваться следующими правилами, чтобы получить корректный конечный результат:
- При экспорте дерева к строке-результату будут добавлены символы { и }. При экспорте списка они будут добавлены, если результат уже не является массивом. При экспорте ветки дерева результат не будет модифицирован.
- И для дерева и для списка при экпорте используется поле Check (Tree.Checked, List.Check). Это поле может иметь следующие значения:
- Для веток, содержащих подчиненные ветки или для элементов списков, значением которых является список, в случае, если это поле равно 0, будут включенные элементы будут считаться объектом JSON ({ и }), если поле равно единице, они будут считаться массивом ([ и ]). Это позволяет корректно отличить пустой объект {} от пустого массива [].
- Для остальных веток поле Check (Tree.Checked, List.Check) используется для указания типа объекта, если объект является строкой. Если поле равно нулю, экспортируемое строковое значение будет заключено в кавычки и перекодировано в формат JSON (см. EncodeString), т.е.
"Имя":"<Перекодированное значение>". Если поле не равно нулю, перекодирование и кавычки добавлены не будут, т.е."Имя":<Значение>. Данная возможность используется для корректного сохранения особых значений типа true, false и null.
- Поле Check для строковых значений также можно использовать для быстрой вставки в объект массива или объекта JSON, заданного в виде строки. Так как в случае Check<>0 перекодирование производиться не будет, результат будет выглядеть, как корректный объект или массив JSON без необходимости его предварительного превращения в ветки дерева или списки (см. пример ниже).
Синтаксис
SaveJSONToString(<Объект дерева, ветки или списка (STRING)>):<Результат (STRING)>
Возвращаемое значение
Будет возвращено строковое значение.
Примеры
//"Отпечаток" сертификата (здесь дан для примера)
пОтпечаток:="ABC123";
//Загрузка простого объекта JSON
Стр:="{""Результат"":{""Вложения"":[{""Файл"":{""Имя"":""Файл1"",""Тип"":0},""Удален"":0},{""Файл"":{""Имя"":""Файл2"",""Тип"":1},""Удален"":1},{""Файл"":{""Имя"":""Файл3"",""Тип"":2},""Удален"":0}]}}";
aTree:=LoadJSONFromString(Стр,0);
aBr:=aTree["Результат","Вложения"];
If _And(TypeStr(aBr)="TREE.BRANCH",aBr.Size()>0) Then
For i:=1 to aBr.Size() Do
//Получим ветку текущего вложения по его индексу
aBr2:=aBr.ByIndex(i);
//Удалим ветку файл в текущем вложении
aBr3:=aBr2.FindByName("Файл");
If not IsEmpty(aBr3) Then
aBr2.Remove(aBr3.Index);
EndIf;
//Добавим ветку подпись, как массив, добавим объект сертификат в первый элемент массива
aBr3:=aBr2.Add(,"Подпись");
//Указание на то, что это массив объектов (здесь не обязательно)
aBr3.Checked:=1;
//Добавим новую ветку в массив
aBr3:=aBr3.Add();
//Добавим заранее подготовленный кусок JSON
aBr4:=aBr3.Add("{""Отпечаток"":"""+EncodeString(пОтпечаток,"JSON")+"""}","Cертификат");
//Указание на то, что текст нельзя перекодировать, а необходимо использовать "как есть"
aBr4.Checked:=1;
EndDo;
EndIf;
Стр:=SaveJSONToString(aTree);
//Будет выведено: {"Результат":{"Вложения":[{"Удален":0,"Подпись":[{"Cертификат":{"Отпечаток":"ABC123"}}]},
// {"Удален":1,"Подпись":[{"Cертификат":{"Отпечаток":"ABC123"}}]},{"Удален":0,"Подпись":[{"Cертификат":{"Отпечаток":"ABC123"}}]}]}}
Message(Стр);
//Мы смогли не только удалить нужные ветки, но и добавить целые куски текста JSON без необходимости в более трудоемком добавлении веток.