Catalog · How the catalog works
JsonEasy
Working with Json in free Pascal.
- ★ 2 on GitHub
Anyone may press Interesting, signed in or not. It helps others find this project.
README
JsonEasy
Небольшой парсер JSON на основе Free Pascal в одном модуле без зависимостей. A small pascal based json parser in one unit with no dependencies.
JsonNode - это класс, используемый для анализа, создания и навигации по документу в формате json. Вам следует только создать и освободить корневой узел вашего документа. Корневой узел будет управлять временем жизни всех дочерних узлов с помощью таких методов, как Add, Delete и Clear. Когда Вы создаете узел TJsonNode, у него не будет родительского элемента, и он будет считаться корневым узлом. Корневой узел должен быть либо массивом, либо объектом. Попытки преобразование root во что-либо, отличное от массива или объекта, вызовет исключение. Примечание: Синтаксический анализатор поддерживает Unicode путем преобразования символов Unicode, экранированных как \u20AC. Если в вашей строке JSON есть экранированный символ Unicode, он не будет экранирован при преобразовании в строку pascal.
//-----------------------------------------------
- Создаём экземпляр и включаем кэширование путей: jCfg := TJsonNode.Create; jCfg.CachePathEnabled := True; //Enable Cache
- Создаём новый узел и запоминаем его в переменной ( nod := jCfg.AddObj )
- jCfg.AddElm( 'Petrov', 'Ivan Ivanovich' ); //Petrov:Ivan Ivanovich
- jCfg.AddElm( 'Petrov', '"Ivan Ivanovich"' ); //Petrov:"Ivan Ivanovich"
- jCfg.AddElm( 'Petrov', '{name:Ivan,ege:33}' ); => Petrov:{name:Ivan,ege:33}
- jCfg.AddElm( 'Petrov'+#10+'two', 'Ivan'+#10+'Ivanovich' );
- nod := jCfg.AddObj( 'Obj' ).AddObj( 'ObName' );
- nod := jCfg.Force( 'Obj/ObName2' );
- jCfg.Force( 'obj/name', 'Alice' );
- jCfg.Force( 'obj name/name first' ).AddElm( 'age', 25 );
- jCfg.Force( 'name' ).Value := 'Alice';
- jCfg.Force( 'Person/Object' ).Parse('{name:"John' +#10+ 'Stiv",age:30,cars:True}');
- jCfg.Parse( 'Obj:ObName' );
- jCfg.Parse( a1:1_000_0, a2: -3.0_01, a3: -0x054, a4:.04, a5: -5_00.6E-2 );
- Создаём массив и добавляем элементы:
- jCfg.Parse( '"cars":["Ford","BMW" , "Fiat"]' );
- jCfg.AddArr( 'arr' ); jCfg.AddArr( 'arr', 'Moscvich' ); jCfg.AddArr( 'arr' ).AddArrElm( 'Ford' ); jCfg.AddArr( 'arr' ).AddArrElm( 'BMW' ).AddArrElm( 'Fiat' );
- jCfg.AddArr( 'arr2' ).Parse := ('2, two only , true' ); arr2:[2, "two only", true]
- jCfg.AddArr( 'arr' ).Count
- Oбъединяем элементы в объекте ( AddMerge )
- jCfg.Find( 'Obj' ).AddMerge( nod.Find( 'Obj' ), True ); // без замены
- jCfg.AddMerge( nod, True ); // с заменой внутренних параметров
- Поиск по пути:
- node := jCfg.Find( 'person/name' );
- Form1.Width := jCfg.Find('main window/width all', 800); //800 - Default
- Саздание комментариев:
- jCfg.AddComment('Сколько лет: ');
- jCfg.Parse( '{//"Сколько лет:",value:42, //авто моё, car:[Москвич, BMW]}' );
- Сохранить/загрузить в файл:
- jCfg.SaveToFile( 'config.json' );
- jCfg2.LoadFromFile( 'config.json' );
- s := jCfg.JsonToText( jfCompressed );
- Перебор всех параметров узла:
- for Node in JsonObjectOrArray do
- Node := Node.First, next, pred, Last, ChildFirst, ChildLast
- Освободить память: jCfg.Root.Free;

