我编写了一个代码,该代码从网站获取JSON文本并对其进行格式化,以便于阅读。我的代码问题是:
public static void gsonFile(){
try {
re = new BufferedReader(new FileReader(dateiname));
Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonParser jp = new JsonParser();
String uglyJSONString ="";
uglyJSONString = re.readLine();
JsonElement je = jp.parse(uglyJSONString);
String prettyJsonString = gson.toJson(je);
System.out.println(prettyJsonString);
wr = new BufferedWriter(new FileWriter(dateiname));
wr.write(prettyJsonString);
wr.close();
re.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
它正确地将其打印到控制台:http://imgur.com/B8MTlYW.png
但在我的txt文件中,它看起来像这样:http://imgur.com/N8iN7dv.png
我能做什么才能将其正确打印到文件中? (用新行分隔)
答案 0 :(得分:2)
Gson使用\n
作为行分隔符(可以在newline
方法here中看到)。
由于记事本不理解\n
,您可以使用其他文件编辑器打开结果文件(写字板,Notepad++,{{3 }},Atom等)或在编写之前将\n
替换为\r\n
:
prettyJsonString = prettyJsonString.replace("\n", "\r\n");
答案 1 :(得分:2)
FileReader和FileWriter是使用平台编码的旧实用程序类。这给出了不可移植的文件。对于JSON,通常使用UTF-8。
Path datei = Paths.get(dateiname);
re = Files.newBufferedReader(datei, StandardCharsets.UTF_8);
或者
List<String> lines = Files.readAllLines(datei, StandardCharsets.UTF_8);
// Without line endings as usual.
或者
String text = new String(Files.readAllBytes(datei), StandardCharsets.UTF_8);
后来:
Files.write(text.getBytes(StandardCharsets.UTF_8));
答案 2 :(得分:1)
文本编辑器存在问题。没有文字。它错误地处理了新的行字符。
我认为它期望CR LF
(Windows方式)符号和Gson
仅生成LF
符号(Unix方式)。
答案 3 :(得分:1)