How to parse a specified value from a JSON object in Delphi XE3?

My JSON object is as follows:

{ "destination_addresses" : [ "Paris, France" ], "origin_addresses" : [ "Amsterdam, Nederland" ], "rows" : [ { "elements" : [ { "distance" : { "text" : "504 km", "value" : 504203 }, "duration" : { "text" : "4 uur 54 min.", "value" : 17638 }, "status" : "OK" } ] } ], "status" : "OK" } 

I will need the value "504 km" from a distance. How can i do this?

+6
source share
2 answers

You can use the DBXJSON block included with Delphi 2010.

Try this sample

 uses DBXJSON; {$R *.fmx} Const StrJson= '{ '+ ' "destination_addresses" : [ "Paris, France" ], '+ ' "origin_addresses" : [ "Amsterdam, Nederland" ], '+ ' "rows" : [ '+ ' { '+ ' "elements" : [ '+ ' { '+ ' "distance" : { '+ ' "text" : "504 km", '+ ' "value" : 504203 '+ ' }, '+ ' "duration" : { '+ ' "text" : "4 uur 54 min.", '+ ' "value" : 17638 '+ ' }, '+ ' "status" : "OK" '+ ' } '+ ' ] '+ ' } '+ ' ], '+ ' "status" : "OK" '+ '}'; procedure TForm6.Button1Click(Sender: TObject); var LJsonObj : TJSONObject; LRows, LElements, LItem : TJSONValue; begin LJsonObj := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(StrJson),0) as TJSONObject; try LRows:=LJsonObj.Get('rows').JsonValue; LElements:=TJSONObject(TJSONArray(LRows).Get(0)).Get('elements').JsonValue; LItem :=TJSONObject(TJSONArray(LElements).Get(0)).Get('distance').JsonValue; ShowMessage(TJSONObject(LItem).Get('text').JsonValue.Value); finally LJsonObj.Free; end; end; 
+9
source

One of the libraries that can parse JSON is superobject .

To get rows.elements.distance from your JSON, the code would look like this:

 var json : ISuperObject; row_item : ISuperObject; elements_item: ISuperObject; begin json := TSuperObject.ParseFile('C:\json.txt', TRUE); // load whole json here for row_item in json['rows'] do // iterate through rows array for elements_item in row_item['elements'] do // iterate through elements array begin WriteLn(elements_item['distance'].S['text']); // get distance sub-json and it text key as string end; end; 
+6
source

Source: https://habr.com/ru/post/956129/


All Articles