Как я могу разобрать строку JSON
{"data":{"results":[{"Branch":"ACCT590003"}]}}
с помощью объекта TJSONObject
? Я хочу получить значение ACCT590003
из этой строки.
Как я могу разобрать строку JSON
{"data":{"results":[{"Branch":"ACCT590003"}]}}
с помощью объекта TJSONObject
? Я хочу получить значение ACCT590003
из этой строки.
Вам не нужно использовать внешние библиотеки для выполнения поиска JSONPath. Пример с Delphi 10 Сиэтл:
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;
TJSonObject
, а не о получении TJsonValue
.. ^^
- person Christopher Stock; 02.04.2020
Попробуйте этот код, он отлично работает
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;
Филиал = 'ACCT590003'
с помощью TALdocument легко
AJsonDoc := TalJsonDocument.create;
AjsonDoc.loadFromJsonString('{"data":{"results":[{"Branch":"ACCT590003"}]}}');
writeln(AjsonDoc.childnode['data']['result'][0]['Branch'].text);
Использование библиотеки SuperObject 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.
Лучшее видео о знакомстве с Json в Delphi Узнайте, как использовать новые функции JSON в RAD Studio 10 Seattle а>
а вот и мой образец.
procedure TForm1.BitBtn2Click(Sender: TObject);
Var
W : TStringWriter;
JW : TJsonTextWriter;
I: Integer;
begin
W :=TStringWriter.Create;
JW := TJsonTextWriter.Create(W);
With JW Do
Begin
Formatting:=TJsonFormatting.Indented;
WriteStartObject;
WritePropertyName('CheckListBox1');
WriteStartArray;
for I := 0 to CheckListBox1.Items.Count-1 do
Begin
WriteStartObject;
WritePropertyName(CheckListBox1.Items[I]);
WriteValue(CheckListBox1.Checked[I]);
WriteEndObject;
End;
WriteEndArray;
WriteEndObject;
End;
Memo1.Clear;
Memo1.Lines.Text:=W.ToString
end;
и не забывайте использовать эти единицы
System.JSON.Writers,System.JSON.readers,System.JSON,System.JSON.Types
для чтения контрольного списка
procedure TForm1.BitBtn3Click(Sender: TObject);
Var
W : TStringReader;
JW : TJsonTextReader;
I: Integer;
begin
W :=TStringReader.Create(Memo1.Lines.Text);
JW := TJsonTextReader.Create(W);
I:=0;
while JW.Read do
Begin
if (JW.Depth = 3) Then
Begin
CheckListBox2.Items.Add(JW.Value.ToString);
JW.Read;
CheckListBox2.Checked[I]:=JW.Value.AsBoolean;
Inc(I);
End;
End;
end;