我需要准备JSON并将其发送到网站。我正在使用TJSONObject
。我的代码很简单:
procedure TForm1.Button1Click(Sender: TObject);
var
JsonArray,JsonArray1:TJSONArray;
F,F1:TJSONObject;
begin
FJSONObject.AddPair('api_password','password');
FJSONObject.AddPair('method','POST');
F:=TJSONObject.Create;
F.AddPair('nest1','v1');
F.AddPair('nest2','v2');
JsonArray:=TJSONArray.Create;
JsonArray.AddElement(F);
FJSONObject.AddPair('Main array',JsonArray);
end;
结果我得到了这个JSON:
{
"api_password": "password",
"method": "POST",
"Main array": [
{
"nest1": "v1",
"nest2": "v2"
}
]
}
但是,根据网站的API,我需要发送此JSON:
{
"api_password": "password",
"method": "POST",
"Main array": [
{
\"nest1\": \"v1\",
\"nest2\": \"v2\"
}
]
}
如何制作此JSON?
答案 0 :(得分:2)
您需要添加字符串,而不是将对象添加到JsonArray
。此时,从FJSONObject
生成字符串时,它会自动将所有"
替换为\"
。但是,只有在F
不包含任何"
时才会有效,否则F.ToString
必须替换为F.ToString.Replace ('\"', '"' )
。您还需要处理F
生命周期,因为它不再由FJSONObject
处理。
procedure TForm1.Button1Click(Sender: TObject);
var
JsonArray : TJSONArray;
F : TJSONObject;
begin
FJSONObject.AddPair('api_password', 'password');
FJSONObject.AddPair('method', 'POST');
F := TJSONObject.Create;
try
F.AddPair('nest1', 'v1');
F.AddPair('nest2', 'v2');
JsonArray := TJSONArray.Create;
JsonArray.Add(F.ToString);
FJSONObject.AddPair('Main array', JsonArray);
finally
F.Free;
end;
end;
不幸的是,您想要的不是标准的JSON格式,您无法轻松生成它。如果您向FJSONObject
添加字符串,系统会自动使用"
处理该字符串。如果直接添加数组,则数组的所有元素都相同。因此总是需要手动替换,并且在生成结果时,您还需要使用此行。
FJSONObject.ToString.Replace('["{', '[{').Replace('}"]', '}]')