Delphi开发系列 JSON使用  
官方Delphi 学习QQ群: 682628230(三千人)
频道

Delphi开发系列 JSON使用


20150827210941235.png

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