What is JSON ?
JSON (JavaScript Object Notation) is a lightweight data-interchange format.
It is easy for humans to read and write.
It is easy for machines to parse and generate.
It is based on a subset of the JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999.
JSON is a text format that is completely language independent but uses conventions that are familiar to programmers.
These properties make JSON an ideal data-interchange language.
You can get more informations on json.org.
{ "name": "Henri Gourvest", /* this is a comment */ "vip": true, "telephones": ["000000000", "111111111111"], "age": 33, "size": 1.83, "adresses": [ { "adress": "blabla", "city": "Metz", "pc": 57000 }, { "adress": "blabla", "city": "Nantes", "pc": 44000 } ] }
Parsing a JSON data structure
var obj: ISuperObject; begin obj := SO('{"foo": true}'); obj := TSuperObject.ParseString('{"foo": true}'); obj := TSuperObject.ParseStream(stream); obj := TSuperObject.ParseFile(FileName); end;
Accessing data
There isn't individual datastructure for each supported data types.
They are all an object: the ISuperObject.
val := obj.AsString; val := obj.AsInteger; val := obj.AsBoolean; val := obj.AsDouble; val := obj.AsArray; val := obj.AsObject; val := obj.AsMethod;
How to read a property value of an object ?
val := obj.AsObject.S['foo']; // get a string val := obj.AsObject.I['foo']; // get an Int64 val := obj.AsObject.B['foo']; // get a Boolean val := obj.AsObject.D['foo']; // get a Double val := obj.AsObject.O['foo']; // get an Object (default) val := obj.AsObject.M['foo']; // get a Method val := obj.AsObject.N['foo']; // get a null object
How to read a value from an array ?
// the advanced way val := obj.AsArray.S[0]; // get a string val := obj.AsArray.I[0]; // get an Int64 val := obj.AsArray.B[0]; // get a Boolean val := obj.AsArray.D[0]; // get a Double val := obj.AsArray.O[0]; // get an Object (default) val := obj.AsArray.M[0]; // get a Method val := obj.AsArray.N[0]; // get a null object
Using paths
Using paths is a very productive method to find an object when you know where is it.
This is some usage cases:
obj['foo']; // get a property obj['123']; // get an item array obj['foo.list']; // get a property from an object obj['foo[123]']; // get an item array from an object obj['foo(1,2,3)']; // call a method obj['foo[]'] := value; // add an item array
you also can encapsulate paths:
obj := so('{"index": 1, "items": ["item 1", "item 2", "item 3"]}'); obj['items[index]'] // return "item 2"
or recreate a new data structure from another:
obj := so('{"index": 1, "items": ["item 1", "item 2", "item 3"]}'); obj['{"item": items[index], "index": index}'] // return {"item": "item 2", "index": 1}
Browsing data structure
Using Delphi enumerator.
Using Delphi enumerator you can browse item's array or property's object value in the same maner.
var item: ISuperObject; begin for item in obj['items'] do ...
you can also browse the keys and values of an object like this:
var item: TSuperAvlEntry; begin for item in obj.AsObject do ... begin item.Name; item.Value; end;
Browsing object properties without enumerator
var item: TSuperObjectIter; begin if ObjectFindFirst(obj, item) then repeat item.key; item.val; until not ObjectFindNext(item); ObjectFindClose(item);
Browsing array items without enumerator
var item: Integer; begin for item := 0 to obj.AsArray.Length - 1 do obj.AsArray[item]
RTTI & marshalling in Delphi 2010
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;
Saving data
obj.AsJSon(options); obj.SaveTo(stream); obj.SaveTo(filename);
Helpers
SO(['prop1', true, 'prop2', 123]); // return an object {"prop1": true, "prop2": 123} SA([true, 123]); // return an array [true, 123]
Non canonical forms
The SuperObject is able to parse non canonical forms.
// unquoted identifiers SO('{foo: true}'); // unescaped or unquoted strings SO('{собственность: bla bla bla}'); // excadecimal SO('{foo: \xFF}');
相关推荐
开源的readme.md编写工具。windows平台
uboot readme 中文注释 uboot readme 中文注释uboot readme 中文注释uboot readme 中文注释uboot readme 中文注释uboot readme 中文注释uboot readme 中文注释uboot readme 中文注释uboot readme 中文注释uboot ...
Readme 破解使用说明
readme,matlab处理文件
缺少README.mdown可以下载使用
loadrunner 9.5 crack readme
readme.rar
从Readme.md文件创建美观简单的HTML页面
Grub4dos 中文ReadMe 0.4.4版
README.md编写教程(基本语法) Markdown是一种纯文本格式的标记语言。通过简单的标记语法,它可以使普通文本内容具有一定的格式。
A basic readme file for running benami games
matlab开发-ReadMe。设置matlab语音处理练习的详细步骤
u-boot的readme文件。 u-boot自带的readme是txt格式的,内容很长不方便阅读。 我把它转成了PDF格式,并增加了索引目录,以方便阅读。 u-boot版本为2013.04
Readme-说明
README.md
README.html
原文档是英文版本的,本文档是徐海蛟博士授课的LibSVM 2013最新版ReadMe中文文档。 LIBSVM是台湾大学林智仁(Lin Chih-Jen)副教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供...
Readme-说明.htm
Flexsim2022 Readme Flexsim2022 Readme
README