TJSONValue
从 JSON 解析出来的值,都是使用 TJSONValue保存的,实际的内容为以下子类之一:
• TJSONObject 结构体,用它的成员 Values['键名'] 获取键值,一共有 Count 对键名/键值,第 i 对键名/键值为 Pairs[i]
• TJSONArray 数组,用它的成员 Items[i] 获取第 i 个值,一共有 Count 个值
• TJSONString 字符串,用它的成员 Value() 获取字符串值
• TJSONNumber 数字,用 AsInt, AsInt64, AsDouble 获取整数或浮点数值,也可以用 Value() 获取值的字符串
• TJSONBool 布尔,用 AsBoolean 获取 bool 值,也可以用 Value() 获取值的字符串。
TJSONBool 可能是它的子类 TJSONTrue 或 TJSONFalse 之一。
• TJSONNull 空,它的成员 Value() 为从父类继承过来的,获取到空的字符串。
TJSONObject
结构体,是一组键名/键值的集合。
• 如果从 TJSONObject 里面读取键名为 KeyName 的键值来,可以用:
TJSONValue KeyValue = jo.Values['KeyName'];
得到的是 KeyValue,这可能是一个结构体、数组、或者一个简单的数值。
• var iPairCount = jo.Count; // 结构体里面一共有这些对键名/键值
TJSONPair Pair = jo.Pairs[i]; // lpPair = 第 i 对键名/键值
string KeyName = Pair.JsonString.Value(); // Pair 的键名
TJSONValue KeyValue = Pair.JsonValue; // Pair 的键值
TJSONPair
一对键名/键值,TJSONPair 经常用到的属性:
• JsonString: 是 TJSONString * 类型的,储存的键名,一般可以用 lpPair->JsonString->Value(); 得到 lpPair 的键名
• JsonValue: 是 TJSONValue * 类型的,这个键值可能是结构体、数组、或者一个简单的数值。
TJSONArray
一组键值,都是使用 TJSONValue * 储存的,Count 是键值的个数,Items[i] 是第 i 个键值。
for i:=0 to i<ja.Count-1 do
begin
TJSONValue Item = ja.Items[i];
//Item 可能是结构体、数组、或者简单的值
end;
TJSONString
一个简单的字符串值,用 Value() 获得字符串值。
TJSONNumber
一个简单的数值,用 AsInt, AsInt64, AsDouble 获取整数或浮点数值,也可以用 Value() 获取值的字符串
TJSONBool / TJSONTrue / TJSONFalse
TJSONBool 是一个简单的布尔值,用 AsBoolean 获取 bool 值,也可以用 Value() 获取值的字符串。储存的值,可能是它的子类 TJSONTrue 或 TJSONFalse 之一。
TJSONNull
是一个空值,它的成员 Value() 为从父类继承过来的,获取到空的字符串。
{
"name":"JSON测试程序,支持UNICODE哦",
"desc": "Copyright © Victor Chen, http://www.cppfans.com/",
"strval": "中文한국어Tiếng Việt",
"整数值": 12345,
"arrval":["¥人民币","€欧元","£英镑","$美元"],
"strarr":
[
{ "path": "fmn061/20111118/€©®", "desc":"啊哦" },
{ "path": "abc/def/ghi", "desc": "abcd"}
]
}
procedure TForm1.btnJSONClick(Sender: TObject);
var
i: Integer;
j: Integer;
jo: TJSONObject;
jv: TJSONArray;
PairName,PairValue: string;
begin
try
jo:= TJSONObject.ParseJSONValue(mmoJson.Lines.Text) as TJSONObject;
//获取指定键值的值
PairValue:= jo.Values['name'].Value;
mmoJsonResult.Lines.Add(Format('【键name的值】:%s',[PairValue]));
mmoJsonResult.Lines.Add('');
//枚举键值对
for i:=0 to jo.Count-1 do
begin
PairName := jo.Pairs[i].JsonString.Value;
if (jo.Pairs[i].JsonValue is TJSONArray) then
begin
jv := jo.Pairs[i].JsonValue as TJSONArray;
PairValue:= '';
for j := 0 to jv.Count-1 do
if jv.Items[j] is TJSONObject then
begin
with jv.Items[j] as TJSONObject do
begin
PairValue:= PairValue + ' ' + GetValue('path').Value; //等同于 Values['path'].Value
PairValue:= PairValue + ' ' + Values['desc'].Value;
end
end
else
PairValue:= PairValue + ' ' + jv.Items[j].Value;
end
else
begin
PairValue := jo.Pairs[i].JsonValue.Value;
end;
mmoJsonResult.Lines.Add(Format('【键】:%s,【值】:%s',[PairName,PairValue]));
end;
finally
jo.Free;
end;
end;
————————————————
原文链接:https://blog.csdn.net/iivii/article/details/103659575
Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号
执行时间: 0.035864114761353 seconds