如何编码输出json文件(SuperObject)?

时间:2013-05-29 02:35:14

标签: json delphi superobject

我正在使用 SuperObject 库来处理JSON。

此代码创建JSON:

procedure TfmMain.btnIngredientsSaveClick(Sender: TObject);
var obj: ISuperObject;
    i: integer;
begin
try
  obj := SO();
  for i := 0 to sgIngredients.RowCount - 2 do
    begin
      obj.O[sgIngredients.Cells[0, i+1]] := SA([]);
      obj.A[sgIngredients.Cells[0, i+1]].S[0] := sgIngredients.Cells[1, i+1];
      obj.A[sgIngredients.Cells[0, i+1]].S[1] := sgIngredients.Cells[2, i+1];
    end;
  obj.SaveTo(ExtractFileDir(Application.ExeName)+ingrJSONFile);
finally
  obj := nil;
end;
end;

sgIngredients - TStringGrid

sgIngredients包含西里尔符号。所以输出文件是:

{
"4":["Hello","count"],
"3":["\u0411\u0443\u043b\u044c\u043e\u043d \u043e\u0432\u043e\u0449\u043d\u043e\u0439","\u0441\u0442."],
"2":["\u0411\u0443\u043b\u044c\u043e\u043d \u043a\u0443\u0440\u0438\u043d\u044b\u0439","\u0441\u0442."],
"1":["\u0411\u0435\u043a\u043e\u043d","\u0433\u0440."]
}

如何正确地将我的数据保存到JSON文件?

修改

这是我的字符串网格的截图。

enter image description here

1 个答案:

答案 0 :(得分:3)

阅读来源,您可以致电function TSuperObject.SaveTo(stream: TStream; indent, escape: boolean): integer;设置escape := false

我可以再说一次,当使用带有源代码的库时,只需“使用源代码,Luke”

此外,您可以将JSON保存到字符串,然后使用实际的WideChar值替换转义字符(如http://UniRed.sf.nethttp://www.sql.ru/forum/936760/perevesti-kodirovannye-simvoly-funkciya-v-delphi-analog-iz-js中所做的那样),然后将生成的字符串保存到文件中同时强制执行UTF-8字符集。