How to parse a JSON string in Delphi?

匿名 (未验证) 提交于 2019-12-03 01:32:01

问题:

How can I parse the JSON string

{"data":{"results":[{"Branch":"ACCT590003"}]}} 

using the TJSONObject object? I want to get the ACCT590003 value from this string.

回答1:

uses   SysUtils,   DBXJSON;  type   TProcessJSONString = TProc;  procedure DoJSONObject(o: TJSONObject; Process: TProcessJSONString); forward;  procedure DoJSONArray(o: TJSONArray; Process: TProcessJSONString); var i: integer;     v: TJSONValue; begin   for i := 0 to o.Size - 1 do begin     v := o.Get(i);     if v is TJSONObject then       DoJSONObject(v as TJSONObject, Process);   end; end;  procedure DoJSONObject(o: TJSONObject; Process: TProcessJSONString); var i: integer;     p: TJSONPair; begin   for i := 0 to o.Size - 1 do begin     p := o.Get(i);     Process(p.JsonString);     if p.JsonValue is TJSONObject then       DoJSONObject(p.JsonValue as TJSONObject, Process)     else if p.JsonValue is TJSONArray then       DoJSONArray(p.JsonValue as TJSONArray, Process)     else if p.JsonValue is TJSONString then       Process(p.JsonValue as TJSONString);   end; end;  var o: TJSONObject; begin   o := TJSONObject.ParseJSONValue('{"data":{"results":[{"Branch":"ACCT590003"}]}}') as TJSONObject;   try     DoJSONObject(o,       procedure (o: TJSONString)       begin         WriteLn(o.ToString);       end     );   finally     o.Free;   end;   ReadLn; end. 


回答2:

Using SuperObject Library https://github.com/hgourvest/superobject/

var json: iSuperObject;     data: string;  begin   json := SO('{"data":{"results":[{"Branch":"ACCT590003"}]}}'); // shorthand // or equal:  JSON := TSuperObject.ParseString('{"data":{"results":[{"Branch":"ACCT590003"}]}}');    data := json.S['data.results[0].Branch'];    WriteLn('Result is: ', data); end. 


回答3:

using TALdocument it's easy

AJsonDoc := TalJsonDocument.create; AjsonDoc.loadFromJsonString('{"data":{"results":[{"Branch":"ACCT590003"}]}}'); writeln(AjsonDoc.childnode['data']['result'][0]['Branch'].text); 


回答4:

Try this code, it works fine

uses System.JSON;  procedure _Parse_JSonValue; var    JSonObject:TJSonObject;    JSonValue:TJSonValue;    st:string;    Branch: string; Begin    st := '{"data":{"results":[{"Branch":"ACCT590003"}]}}';    JSonObject := TJSonObject.Create;    JsonValue:=JSonObject.ParseJSONValue(st);    JsonValue:=(JsonValue as TJSONObject).Get('data').JSONValue;    JsonValue:=(JsonValue as TJSONObject).Get('results').JSONValue;    if (JSONValue is TJSONArray) then       Branch := ((JSONValue as TJSONArray).Items[0] as TJSonObject).Get('Branch').JSONValue.Value;    JSonObject.Free; End; 

Branch = 'ACCT590003'



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!