BufferedWriter没有正确编写JSON字符串

时间:2016-09-05 14:56:19

标签: java json string writer

我编写了一个代码,该代码从网站获取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

我能做什么才能将其正确打印到文件中? (用新行分隔)

4 个答案:

答案 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)

快速搜索后,这个主题可能会派上用场。

Strings written to file do not preserve line breaks

此外,在其他编辑器中打开像其他编辑说的那样也会有所帮助