Delphi XE格式的json字符串

时间:2018-05-17 12:58:27

标签: json delphi

我需要准备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?

1 个答案:

答案 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('}"]', '}]')