我正在使用 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文件?
修改
这是我的字符串网格的截图。
答案 0 :(得分:3)
阅读来源,您可以致电function TSuperObject.SaveTo(stream: TStream; indent, escape: boolean): integer;
设置escape := false
我可以再说一次,当使用带有源代码的库时,只需“使用源代码,Luke”
此外,您可以将JSON保存到字符串,然后使用实际的WideChar值替换转义字符(如http://UniRed.sf.net或http://www.sql.ru/forum/936760/perevesti-kodirovannye-simvoly-funkciya-v-delphi-analog-iz-js中所做的那样),然后将生成的字符串保存到文件中同时强制执行UTF-8字符集。