<html>
<head>
<style type="text/css">
<!--
pre#excode {
background-color:#FFFFFF;
border:1px dashed #000000;
font-family:'courier new';
font-size:8pt;
padding:8px;
}
span#lit {
color:#0000FF;
}
span#keyw {
color:#000000;
font-weight:bold;
}
span#cmt {
color:#008000;
}
span#dtyp {
color:#2B91AF;
}
--> </style>
</head>
<body bgcolor="#D4D0C8">
<h1>SuperObject</h1>
<h3>What is JSON ?</h3>
<p>
JSON (JavaScript Object Notation) is a lightweight data-interchange format.<br>
It is easy for humans to read and write. <br>
It is easy for machines to parse and generate. <br>
It is based on a subset of the JavaScript Programming Language,
Standard ECMA-262 3rd Edition - December 1999. <br>
JSON is a text format that is
completely language independent but uses conventions that are familiar to programmers.<br>
These properties make JSON an ideal data-interchange language.<br>
You can get more informations on <a href="http://www.json.org">json.org</a>.
<pre id="exCode">
{
"name": <span id="lit">"Henri Gourvest"</span>, <span id="cmt">/* this is a comment */</span>
"vip": true,
"telephones": [<span id="lit">"000000000"</span>, <span id="lit">"111111111111"</span>],
"age": 33,
"size": 1.83,
"adresses": [
{
"adress": <span id="lit">"blabla"</span>,
"city": <span id="lit">"Metz"</span>,
"pc": 57000
},
{
"adress": <span id="lit">"blabla"</span>,
"city": <span id="lit">"Nantes"</span>,
"pc": 44000
}
]
}
</pre>
<h3>Parsing a JSON data structure</h3>
<pre id="exCode">
<span id="keyw">var</span>
obj: ISuperObject;
<span id="keyw">begin</span>
obj := SO(<span id="lit">'{"foo": true}'</span>);
obj := TSuperObject.ParseString(<span id="lit">'{"foo": true}'</span>);
obj := TSuperObject.ParseStream(stream);
obj := TSuperObject.ParseFile(FileName);
<span id="keyw">end;</span>
</pre>
<h3>Accessing data</h3>
<p>
There isn't individual datastructure for each supported data types.<br>
They are all an object: the <b>ISuperObject</b>.
</p>
<pre id="exCode">
val := obj.AsString;
val := obj.AsInteger;
val := obj.AsBoolean;
val := obj.AsDouble;
val := obj.AsArray;
val := obj.AsObject;
val := obj.AsMethod;
</pre>
<h4>How to read a property value of an object ?</h4>
<pre id="exCode">
val := obj.AsObject.S[<span id="lit">'foo'</span>]; <span id="cmt">// get a string</span>
val := obj.AsObject.I[<span id="lit">'foo'</span>]; <span id="cmt">// get an Int64</span>
val := obj.AsObject.B[<span id="lit">'foo'</span>]; <span id="cmt">// get a Boolean</span>
val := obj.AsObject.D[<span id="lit">'foo'</span>]; <span id="cmt">// get a Double</span>
val := obj.AsObject.O[<span id="lit">'foo'</span>]; <span id="cmt">// get an Object (default)</span>
val := obj.AsObject.M[<span id="lit">'foo'</span>]; <span id="cmt">// get a Method</span>
val := obj.AsObject.N[<span id="lit">'foo'</span>]; <span id="cmt">// get a null object</span>
</pre>
<h4>How to read a value from an array ?</h4>
<pre id="exCode">
<span id="cmt">// the advanced way</span>
val := obj.AsArray.S[0]; <span id="cmt">// get a string</span>
val := obj.AsArray.I[0]; <span id="cmt">// get an Int64</span>
val := obj.AsArray.B[0]; <span id="cmt">// get a Boolean</span>
val := obj.AsArray.D[0]; <span id="cmt">// get a Double</span>
val := obj.AsArray.O[0]; <span id="cmt">// get an Object (default)</span>
val := obj.AsArray.M[0]; <span id="cmt">// get a Method</span>
val := obj.AsArray.N[0]; <span id="cmt">// get a null object</span>
</pre>
<h4>Using paths</h4>
<p>Using paths is a <b>very productive</b> method to find an object when you know where is it.<br>
This is some usage cases:
</p>
<pre id="exCode">
obj[<span id="lit">'foo'</span>]; <span id="cmt">// get a property</span>
obj[<span id="lit">'123'</span>]; <span id="cmt">// get an item array</span>
obj[<span id="lit">'foo.list'</span>]; <span id="cmt">// get a property from an object</span>
obj[<span id="lit">'foo[123]'</span>]; <span id="cmt">// get an item array from an object</span>
obj[<span id="lit">'foo(1,2,3)'</span>]; <span id="cmt">// call a method</span>
obj[<span id="lit">'foo[]'</span>] := value; <span id="cmt">// add an item array</span>
</pre>
<p>you also can encapsulate paths:</p>
<pre id="exCode">
obj := so(<span id="lit">'{"index": 1, "items": ["item 1", "item 2", "item 3"]}'</span>);
obj[<span id="lit">'items[index]'</span>] <span id="cmt">// return "item 2"</span>
</pre>
<p>or recreate a new data structure from another:</p>
<pre id="exCode">
obj := so(<span id="lit">'{"index": 1, "items": ["item 1", "item 2", "item 3"]}'</span>);
obj[<span id="lit">'{"item": items[index], "index": index}'</span>] <span id="cmt">// return {"item": "item 2", "index": 1}</span>
</pre>
<h3>Browsing data structure</h3>
<h4>Using Delphi enumerator.</h4>
<p>Using Delphi enumerator you can browse item's array or property's object value in the same maner.</p>
<pre id="exCode">
<span id="keyw">var</span>
item: ISuperObject;
<span id="keyw">begin</span>
<span id="keyw">for</span> item <span id="keyw">in</span> obj[<span id="lit">'items'</span>] <span id="keyw">do</span> ...
</pre>
<p>you can also browse the keys and values of an object like this:</p>
<pre id="exCode">
<span id="keyw">var</span>
item: TSuperAvlEntry;
<span id="keyw">begin</span>
<span id="keyw">for</span> item <span id="keyw">in</span> obj.AsObject <span id="keyw">do</span> ...
<span id="keyw">begin</span>
item.Name;
item.Value;
<span id="keyw">end</span>;
</pre>
<h4>Browsing object properties without enumerator</h4>
<pre id="exCode">
<span id="keyw">var</span>
item: TSuperObjectIter;
<span id="keyw">begin</span>
<span id="keyw">if</span> ObjectFindFirst(obj, item) <span id="keyw">then</span>
<span id="keyw">repeat</span>
item.key;
item.val;
<span id="keyw">until</span> <span id="keyw">not</span> ObjectFindNext(item);
ObjectFindClose(item);
</pre>
<h4>Browsing array items without enumerator</h4>
<pre id="exCode">
<span id="keyw">var</span>
item: Integer;
<span id="keyw">begin</span>
<span id="keyw">for</span> item := 0 <span id="keyw">to</span> obj.AsArray.Length - 1 <span id="keyw">do</span>
obj.AsArray[item]
</pre>
<h3>RTTI & marshalling in Delphi 2010</h3>
<pre id="exCode">
<span id="keyw">type</span>
TData = <span id="keyw">record</span>
str: string;
int: Integer;
bool: Boolean;
flt: Double;
<span id="keyw">end;</span>
<span id="keyw">var</span>
ctx: TSuperRttiContext;
data: TData;
obj: ISuperObject;
<span id="keyw">begin</span>
ctx := TSuperRttiContext.Create;
<span id="keyw">try</span>
data := ctx.AsType<TData>(SO(<span id="lit">'{str: "foo", int: 123, bool: true, flt: 1.23}'</span>));
obj := ctx.AsJson<TData>(data);
<span id="keyw">finally</span>
ctx.Free;
<span id="keyw">end;</span>
<span id="keyw">end;</span>
</pre>
<h3>Saving data</h3>
<pre id="exCode">
obj.AsJSon(options);
obj.SaveTo(stream);
obj.SaveTo(filename);
</pre>
<h3>Helpers</h3>
<pre id="exCode">
SO([<span id="lit">'prop1'</span>, true, <span id="lit">'prop2'</span>, 123]); <span id="cmt">// return an object {"prop1": true, "prop2": 123}</span>
SA([true, 123]); <span id="cmt">// return an array [true, 123]</span>
</pre>
<h3>Non canonical forms</h3>
The SuperObject is able to parse non canonical forms.
<pre id="exCode">
<span id="cmt">// unquoted identifiers</span>
SO(<span id="lit">'{foo: true}'</span>);
<span id="cmt">// unescaped or unquoted strings</span>
SO(<span id="lit">'{собственность: bla bla bla}'</span>);
<span id="cmt">// excadecimal</span>
SO(<span id="lit">'{foo: \xFF}'</span>);
</pre>
</body>
</html>
没有合适的资源?快使用搜索试试~ 我知道了~
Delphi superobject
共65个文件
svn-base:25个
dpr:10个
entries:8个
5星 · 超过95%的资源 需积分: 37 301 下载量 46 浏览量
2014-09-03
09:53:19
上传
评论 2
收藏 133KB RAR 举报
温馨提示
用于delphi操作JSON的库函数单元,superobject中自动默认为UNICODE编码,处理中文会出现乱码
资源推荐
资源详情
资源评论
收起资源包目录
superobject.rar (65个子文件)
superobject
superobject.pas 203KB
demos
googlesuggest
main.dfm 632B
main.pas 1KB
suggest.dpr 288B
.svn
all-wcprops 388B
prop-base
props
tmp
prop-base
props
text-base
text-base
suggest.dpr.svn-base 288B
main.dfm.svn-base 632B
main.pas.svn-base 1KB
entries 651B
RTTI
main.dfm 834B
main.pas 2KB
rttisearch.dpr 288B
.svn
all-wcprops 358B
prop-base
props
tmp
prop-base
props
text-base
text-base
rttisearch.dpr.svn-base 288B
main.dfm.svn-base 834B
main.pas.svn-base 2KB
entries 645B
PropertyEditor
soeditor.pas 4KB
demo.png 8KB
.svn
all-wcprops 293B
prop-base
demo.png.svn-base 53B
props
tmp
prop-base
props
text-base
text-base
soeditor.pas.svn-base 4KB
demo.png.svn-base 8KB
entries 517B
VirtualTreeView
soedit.dpr 357B
main.dfm 4KB
main.pas 7KB
.svn
all-wcprops 502B
prop-base
props
tmp
prop-base
props
text-base
text-base
soedit.dpr.svn-base 357B
main.dfm.svn-base 4KB
main.pas.svn-base 7KB
sample.json.svn-base 745B
entries 802B
sample.json 745B
googlesearch
search.dpr 284B
main.dfm 834B
main.pas 1KB
.svn
all-wcprops 382B
prop-base
props
tmp
prop-base
props
text-base
text-base
main.dfm.svn-base 834B
main.pas.svn-base 1KB
search.dpr.svn-base 284B
entries 649B
.svn
all-wcprops 68B
prop-base
props
tmp
prop-base
props
text-base
text-base
entries 288B
superxmlparser.pas 42KB
tests
test_usage.dpr 4KB
test_prototype.dpr 1KB
test_format.dpr 785B
test_rpc.dpr 618B
test_validate.dpr 3KB
.svn
all-wcprops 666B
prop-base
props
tmp
prop-base
props
text-base
text-base
test_prototype.dpr.svn-base 1KB
test_rpc.dpr.svn-base 618B
test_format.dpr.svn-base 785B
test_validate.dpr.svn-base 3KB
test_perf.dpr.svn-base 1KB
test_usage.dpr.svn-base 4KB
entries 1KB
test_perf.dpr 1KB
readme.html 8KB
.svn
all-wcprops 345B
prop-base
props
tmp
prop-base
props
text-base
text-base
readme.html.svn-base 8KB
superxmlparser.pas.svn-base 42KB
superobject.pas.svn-base 203KB
entries 680B
共 65 条
- 1
LaiRongFang
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Surfer,线性函数
- MyBatis 的动态 SQL 是其核心特性之一.txt
- 时代的sdddsddsddsd
- 基于哈希链表的简单人员信息管理系统
- 其他类别JdonFramework开源框架 v5.1 Build20071025-jdonframework-5.1.rar
- 2001~2022年上市公司数字赋能指数.dta
- 2001~2022年上市公司数字赋能指数.xlsx
- 信息办公石大在线财务管理系统(含源码)-shidacaiwu.rar
- 信息办公电信计费系统完整代码-netctossconformity.rar
- matlab实现TD-SCDMA中初始同步捕捉DwPTS下行同步导频时隙的仿真.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
前往页