Delphi XE10.4 json生成与解析
与同事合作,动态为Web程序,传递Josn数据,所以学习Josn,做相关代码,心得如下,便于众人借鉴:
一、Josn简介
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。它基于ECMA262语言规范(1999-12第三版)中JavaScript编程语言的一个子集。 JSON采用与编程语言无关的文本格式,但是也使用了类C语言(包括C, C++, C#, Java, JavaScript, Perl, Python等)的习惯,这些特性使JSON成为理想的数据交换格式。
Delphi2009开始支持Json。
二、结构
1、构成JSON的Pari
Pari就是一对的意思,它由二部分组成:
(1)名称,使用“''”首尾使用双绰号包起来;
(2)数值,使用中括号“[]”括起来;
(3)二者之间使用“:”分隔。
例如:{"value": [95]}
注意:pari的数值可以由Json的{Pari}取代,这样构成上下二层关系JSON。
例如:{"value": {"cel":[100,101]}}
2、分隔字符
JSONr 数据结构,就是通过pari展现。
(1)Pari的名称,使用使用“''”首尾使用双绰号首尾包起来。
(2)Pari的数据数据值“[]”括起来它包含的内容。
(3)Pari的数据数据值内部并列数据,使用“,”分隔。
(4)Pari单元,由名称和数值之间用“:”分隔。
(5)Pari如果构成JSon结构必须用“{}”字符包含它的内容。
(6)Pari中的字符串,由“"”首尾括起来。
三、JSON的分层
(1)一层结构
1、一个Pari的JSON:
{"Name":["lyhoo"]} // 一个Pari数据是字符
{"totla":[100]} // 一个Pari数据是整数
2、多个Pari并列的JSON:
{"Name":["lyhoo"],"Name1":["lyhoo1"]} // 二个Pari
{"totla":[100],"sun":[200],"first":[300]} // 三个Pari
(2)二层结构
例1:一个Boot,第二层(一个Pari)
{"Name":{"totla":[100]}} // Pari的数值是一个Json结构
例2:一个Boot,第二层(四个Pari)
{"dDataset":{"city":["上海"],"occupy": [58],"total": [61],"value": [95]}}
例3:一个Boot,第二层(四个Pari,Pari的数值由数组组成)
{"dDataset":{"city":["上海","北京","杭州","南京"],"occupy": [58, 47, 59, 61],"total": [61, 83, 80, 67],"value": [95, 57, 74, 91]}}
了解JSON的结构非常必要,对于编辑创建和折分JSON,很有帮助。要今后的生成和折分,都是要分层进行的。
三、对象方法
1、TJSONObject
AddPair // 加入Pari(名称,数值)
GetValue // 获取Pari
Get[] // 获取指定位置Pair对象
count // Pari和个数
2、TJSONpari
JsonString // 获取名称
JsonValueg // 获取数据
3、TJSONArray
count // 数组个数
add // 加入值
AddElement // 加入元素
Items[] // 获取指定位置数据
以上是最基本的对象的方法。
四、生成Json
1、首先做一个结构图:
2、依据结构,由下向上逐级,创建JSONObject,若有的Josn结构的值是数组,最后由带入Boot,完成Josn生成.
以上生成例3的JSON代码。
五、遍历Json
建议建立一个回归方法,可以不限层数。
六、其它事项
1、读入文本文件
(1)通过TStringStream读取
var StringStream:TStringStream;
JsonBoot :TJSONObject;
FileName:string;
begin
FileName:=Edit1.Text;
JsonBoot:=TJSONObject.Create;
StringStream := TStringStream.Create('', TEncoding.UTF8);
StringStream.LoadFromFile(FileName);
JsonBoot := TJSONObject.ParseJSONValue(StringStream.DataString) as TJSONObject;
if checkbox1.Checked
then Memo1.Text := JsonBoot.Format(4)
else Memo1.Text := JsonBoot.ToString; // 格式化文本
end;
(2)通过TStringList读取
JSONboot:=TJSONObject.ParseJSONValue(Trim(Memo1.Text)) as TJSONObject;
JSONboot:=TJSONObject.ParseJSONValue(Trim(MyList.Text)) as TJSONObject;
2、保存json文件
var StringStream:TStringStream;
begin
FileName:=Edit1.Text;
StringStream.Create;
StringStream.WriteString(Jsonboot.ToString);
StringStream.SaveToFile(FileName);
end;
3、数组Add指定数据类型
var
JSONarr: TJSONArray;
JSONobj: TJSONObject;
begin
JSONarr := TJSONArray.Create;
JSONarr.AddElement(TJSONString.Create('abc'));
JSONarr.AddElement(TJSONNumber.Create(123));
JSONarr.AddElement(TJSONBool.Create(true));
JSONobj := TJSONObject.Create;
JSONobj.AddPair('book', TJSONString.Create('james'));
JSONobj.AddPair('bank', TJSONNumber.Create(38));
JSONobj.AddPair('phone', TJSONBool.Create(true));
JSONobj.AddElement(JSONarr);
end;
浙公网安备 33010602011771号