Difference between revisions of "SaveJSONToString"
1>Admin |
m (1 revision imported) |
(No difference)
|
Latest revision as of 12:22, 17 July 2022
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 без необходимости в более трудоемком добавлении веток.