How to parse a JSON string in Delphi?

后端 未结 5 946
太阳男子
太阳男子 2020-12-14 18:00

How can I parse the JSON string

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

using the T

相关标签:
5条回答
  • 2020-12-14 18:31

    You don't need to use external libraries to perform a JSONPath search. Example with Delphi 10 Seattle:

    uses  System.JSON;
    procedure ParseJSonValue;
    var
       JSonValue:TJSonValue;
       st:string;
       Branch: string;
    begin
       st := '{"data":{"results":[{"Branch":"ACCT590003"}]}}';
       JsonValue := TJSonObject.ParseJSONValue(st);
       Branch := JsonValue.GetValue<string>('data.results[0].Branch');
       JsonValue.Free;
    end;
    
    0 讨论(0)
  • 2020-12-14 18:34

    using TALdocument it's easy

    AJsonDoc := TalJsonDocument.create;
    AjsonDoc.loadFromJsonString('{"data":{"results":[{"Branch":"ACCT590003"}]}}');
    writeln(AjsonDoc.childnode['data']['result'][0]['Branch'].text);
    
    0 讨论(0)
  • 2020-12-14 18:34

    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.
    
    0 讨论(0)
  • 2020-12-14 18:39

    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'

    0 讨论(0)
  • 2020-12-14 18:42
    uses
      SysUtils,
      DBXJSON;
    
    type
      TProcessJSONString = TProc<TJSONString>;
    
    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.
    
    0 讨论(0)
提交回复
热议问题