類似這種json陣列格式如何讀取?
[
{
"children": [
{
"code": "YJ0804",
"havePicture": 0,
"id": "134389",
"name": "晶相冊",
"sameNegative": false
},
{
"code": "XKo03",
"havePicture": 0,
"id": "134388",
"name": "10寸歐典擺框",
"sameNegative": true
}
],
"id": "eee19ba6dfd648a68a2bcea6d16f51b5",
"maxPicture": 0,
"name": "2018成長套系一",
"open": true,
"root": true
},
{
"children": [
{
"code": "CP00000229",
"havePicture": 0,
"id": "134588",
"maxPicture": 1,
"name": "方8寸愛馬仕相冊",
"productType": "相冊",
"sameNegative": false
}
],
"id": "二次消費",
"maxPicture": 0,
"name": "二次消費",
"open": true,
"root": true
}
]
uj5u.com熱心網友回復:
正常陣列啊 該怎么讀就怎么讀, 第一層是array, 第2層是object, 里面children元素型別又是array, 然后里面就是key-valueuj5u.com熱心網友回復:
先轉換成json物件,D7用superobject.pas,高版本的delphi可以直接用System.JSONuj5u.com熱心網友回復:
使用superobject.pas,按節點的模式,進行讀寫。uj5u.com熱心網友回復:
varjsonObj,Item,ItemChild : ISuperObject;
begin
jsonObj := SO(你的json字串);
for Item in jsonObj do begin
Item.S['id'];
Item.I['maxPicture'];
.....
for ItemChild in Item do begin
Item.S['code'];
Item.I['havePicture'];
.....
end;
end;
end;
uj5u.com熱心網友回復:
delphi 最新有自帶的System.json.Serializers單元可以對json格式直接序列化與反序列化Deserialize,Initialize;你可以查這方面資料uj5u.com熱心網友回復:
function TCommonFileS.Initialize(AJSONString: WideString; AKey: String): Boolean;
var
I: integer;
JSONObject: TJSONObject;
JSONArray: TJSONArray;
JSONCommonFile: TJSONCommonFile;
begin
JSONObject := nil;
Result := True;
try
// TJSONObject.ParseJSONValue會發生例外
JSONObject := TJSONObject.ParseJSONValue(AJSONString) as TJSONObject;
if JSONObject.TryGetValue(AKey, JSONArray) then
begin
if Assigned(JSONArray) then
begin
Self.Clear;
for I := 0 to JSONArray.Count - 1 do
begin
JSONCommonFile := JSONArray.Items[I].ToJSON;
Self.Add(TCommonFile.Deserialize(JSONCommonFile));
end;
end;
end;
except
on E: Exception do
begin
Result := False;
ShowMessage(Format('@%s.Initialize=> "%s" %s', [ClassName, AJSONString,
E.message]));
end;
end;
JSONObject.Free;
end;
uj5u.com熱心網友回復:
這是一個將json轉換成一個物件、將一個物件轉換成json的例子你可以按著這個格式來unit Unit14;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm14 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
Memo2: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TUser = class
public
FAge: Integer;
FLastName: string;
FFirstName: string;
end;
var
Form14: TForm14;
implementation
uses
System.json,
System.json.Converters,
System.json.Serializers,
System.Generics.Collections;
{$R *.dfm}
procedure TForm14.Button1Click(Sender: TObject);
var
user: TUser;
userList: TObjectList<TUser>;
// userList: TArray<TUser>;
JSONObject: TJSONObject;
begin
// SetLength(userList, 2);
userList := TObjectList<TUser>.Create;
user := TUser.Create;
user.FAge := 1;
user.FFirstName := 'delphi';
user.FLastName := '英文';
// userList[0] := user;
// userList.Add(user);
user := TUser.Create;
user.FFirstName := '中文';
user.FAge := 2;
user.FLastName := 'tokyo';
// userList.Add(user);
// userList[1] := user;
Memo1.Text := TJsonSerializer.Create.Serialize(userList);
end;
procedure TForm14.Button2Click(Sender: TObject);
var
// userList: TArray<TUser>;
userList: TObjectList<TUser>;
user: TUser;
begin
userList := TJsonSerializer.Create.Deserialize < TObjectList < TUser >>
(Memo1.Text);
Memo2.Clear;
for user in userList do
begin
Memo2.Lines.Add(user.FAge.ToString);
Memo2.Lines.Add(user.FFirstName);
Memo2.Lines.Add(user.FLastName);
end;
{
user := TJsonSerializer.Create.Deserialize<TUser>(Memo1.Text);
Memo2.Lines.Add(user.FAge.ToString);
Memo2.Lines.Add(user.FFirstName);
Memo2.Lines.Add(user.FLastName); }
end;
end.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/32560.html
標籤:網絡通信/分布式開發
上一篇:MySQL初始化函式的問題
