json 3

基于前面写的内容,我们可以快速读取一个数组的JSON串了,直接上代码:

复制代码
procedure TForm6.Button2Click(Sender: TObject);
begin
var jsonstr:=
            '{' +
            '    "code": 0,' +
            '    "msg": "Success",' +
            '    "check": true,' +
            '    "datas": [{' +
            '            "id": 1,' +
            '            "name": "测试1",' +
            '            "age": 10' +
            '        },' +
            '        {' +
            '            "id": 2,' +
            '            "name": "测试2",' +
            '            "age": 10' +
            '        },' +
            '        {' +
            '            "id": 3,' +
            '            "name": "测试3",' +
            '            "age": 10' +
            '        },' +
            '        {' +
            '            "id": 4,' +
            '            "name": "测试4",' +
            '            "age": 10' +
            '        },' +
            '        {' +
            '            "id": 5,' +
            '            "name": "测试5",' +
            '            "age": 10' +
            '        }' +
            '    ],' +
            '    "time": "2020-12-03 11:19:08"' +
            '}';

  var jv := TJSONValue.ParseJSONValue(jsonstr);
  Log('code=' + jv.GetValue<TJSONValue>('code').Value);
  Log('msg=' + jv.GetValue<TJSONValue>('msg').Value);
  Log('check=' + jv.GetValue<TJSONBool>('check').Value);
  Log('time=' + jv.GetValue<TJSONValue>('time').Value);
  var ja := jv.GetValue<TJSONArray>('datas');
  var jva: TJSONValue;
  for jva in ja do
  begin
    Log('id=' + jva.GetValue<TJSONValue>('id').Value);
    Log('name=' + jva.GetValue<TJSONValue>('name').Value);
    Log('age=' + jva.GetValue<TJSONValue>('age').Value);
  end;

end;
复制代码

 

输出结果:

通过上面的代码,其核心是基于TJSONValue及TJSONArray对象,就解析了这个JSON串!! 

如果我们将jva转换成一个TJSONObject对象,那么基于TJSONObject对象的GetValue方法,可以改写这样:

复制代码
  var ja := jv.GetValue<TJSONArray>('datas');
  var jva: TJSONValue;
  for jva in ja do
  begin
    var jo:=jva as TJSONObject;
    Log('id=' + jo.GetValue('id').Value);
    Log('name=' + jo.GetValue('name').Value);
    Log('age=' + jo.GetValue('age').Value);
  end;
复制代码

这里的jo.GetValue返回TJsonValue对象。喜欢哪种写法,看你了。

posted @ 2023-09-01 10:14  fxg  阅读(12)  评论(0编辑  收藏  举报