Var S : TFileStream; P : TJSONParser; D : TJSONData; begin S:=TFileStream.Create(AFileName,fmOpenRead); try P:=TJSONParser.Create(S); try P.Strict:=FStrict; D:=P.Parse; finally P.Free; end; finally S.Free; end; FFileName:=AFileName; SetCaption; FreeAndNil(FRoot); FRoot:=D; ShowJSONDocument; end;
procedure TMainForm.ShowJSONDocument;
begin With TVJSON.Items do begin BeginUpdate; try TVJSON.Items.Clear; SHowJSONData(Nil,FRoot); With TVJSON do If (Items.Count>0) and Assigned(Items[0]) then begin Items[0].Expand(False); Selected:=Items[0]; end; finally EndUpdate; end; end; end;
procedure TMainForm.ShowJSONData(AParent : TTreeNode; Data : TJSONData);
Var N,N2 : TTreeNode; I : Integer; D : TJSONData; C : String; S : TStringList;
begin N:=Nil; if Assigned(Data) then begin Case Data.JSONType of jtArray, jtObject: begin If (Data.JSONType=jtArray) then C:=SArray else C:=SObject; N:=TVJSON.Items.AddChild(AParent,Format(C,[Data.Count])); S:=TstringList.Create; try For I:=0 to Data.Count-1 do If Data.JSONtype=jtArray then S.AddObject(IntToStr(I),Data.items[i]) else S.AddObject(TJSONObject(Data).Names[i],Data.items[i]); If FSortObjectMembers and (Data.JSONType=jtObject) then S.Sort; For I:=0 to S.Count-1 do begin N2:=TVJSON.Items.AddChild(N,S[i]); D:=TJSONData(S.Objects[i]); N2.ImageIndex:=ImageTypeMap[D.JSONType]; N2.SelectedIndex:=ImageTypeMap[D.JSONType]; ShowJSONData(N2,D); end finally S.Free; end; end; jtNull: N:=TVJSON.Items.AddChild(AParent,SNull); else N:=TVJSON.Items.AddChild(AParent,Data.AsString); end; If Assigned(N) then begin N.ImageIndex:=ImageTypeMap[Data.JSONType]; N.SelectedIndex:=ImageTypeMap[Data.JSONType]; N.Data:=Data; end; end; end;