-1

我正在使用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 文件?

编辑

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

在此处输入图像描述

4

1 回答 1

3

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

我可以再说一遍,当使用给出源代码的库时,只需“使用源代码,卢克”

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

于 2013-05-29T06:35:04.303 回答