{
"班级1": {
"classid": "101",
"teacher": "Lee",
"age": 25,
"books": [
"book1",
"book2",
"book3"
]
},
"班级2": {
"classid": "102",
"teacher": "Lee",
"age": 25,
"books": [
"book1",
"book2",
"book3"
]
},
"班级3": {
"classid": "103",
"teacher": "Lee",
"age": 25,
"books": [
"book1",
"book2",
"book3"
]
},
"班级4": {
"classid": "104",
"teacher": "Lee",
"age": 25,
"books": [
"book1",
"book2",
"book3"
]
},
"班级5": {
"classid": "105",
"teacher": "Lee",
"age": 25,
"books": [
"book1",
"book2",
"book3"
]
}
}
var
i,j: Integer;
jo: TJSONObject;
root,root2: TJSONObject;
jArr: TJSONArray;
sKey,sVal: string;
aPair: TJSONPair;
aItem: TJsonValue;
begin
jo := TJSONObject.Create;
try
for i := 1 to 5 do
begin
jo.AddPair(Format('班级%d',[i])
,TJSONObject.Create
.AddPair('classid',Format('10%d',[i]))
.AddPair('teacher','Lee')
.AddPair('age',TJSONNumber.Create(25))
.AddPair('books',TJSONArray.Create
.add('book1').add('book2').add('book3'))
);
end;
FJsonStr := jo.ToString;
Memo1.Text := JSON_Format(jo.ToString);
finally
jo.Free;
end;
//Parse Json
root := TJSONObject.ParseJSONValue(FJsonStr) as TJSONObject;
if root <> nil then
try
//for i := 0 to root.Size - 1 do
for i := 0 to root.Count - 1 do //同上
begin
sKey := root.Get(i).JsonString.value;
sVal := root.Get(i).JsonValue.toString;
addLog('[%d] Key:%s,Val:%s',[i,sKey,sVal]);
//root2 := root.Get(i).JsonValue as TJSONObject;
root2 := root.GetValue(sKey) as TJSONObject; //同上
sKey := root2.Get(0).JsonString.value;
//sVal := root2.Get(0).JsonValue.toString;
sVal := root2.GetValue(sKey).ToString;
addLog('[root2[0]] Key:%s,Val:%s',[sKey,sVal]);
jArr := root2.GetValue('books') as TJSONArray;
for j := 0 to jArr.Size - 1 do
begin
//addLog('Arr%d:%s',[j,jArr.Items[j].ToString]); //带双引号
addLog('Arr%d:%s',[j,jArr.Items[j].Value]); //不带双引号
end;
end;
finally
root.Free;
end;
// Update
root:= TJSONObject.ParseJSONValue(Trim(FJsonStr)) as TJSONObject;
if root <> nil then
try
for i := 0 to Root.Count-1 do
begin
sKey := Root.Get(i).JsonString.value;
sVal := Root.Get(i).JsonValue.toString;
Root2:= Root.GetValue(sKey) as TJSONObject;
//aPair:= Root2.Get(0);//
aPair:= Root2.Get('classid'); //ok
aItem := TJSONString.Create('New'+IntToStr(i));
aPair.JsonValue := aItem;
end;
FJsonStr := root.ToString;
addLog(JSON_Format(FJsonStr));
finally
root.Free;
end;
// Remove
root:= TJSONObject.ParseJSONValue(Trim(FJsonStr)) as TJSONObject;
if root <> nil then
try
for i := 0 to Root.Count-1 do
begin
sKey := Root.Get(0).JsonString.value;
root.RemovePair(sKey).Free;
addLog('Remove: ' + sKey);
end;
finally
root.Free;
end;
end;