简体   繁体   中英

BufferedWriter doesnt write JSON String correctly

I wrote a code that gets a JSON text from a website and formats it so it is easier to read. My problem with the code is:

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();
}
}

It correctly prints it into the console : http://imgur.com/B8MTlYW.png

But in my txt file it looks like this: http://imgur.com/N8iN7dv.png

What can I do so it correctly prints it into the file? (separated by new lines)

Gson uses \\n as line delimiter (as can be seen in the newline method here ).

Since Notepad does not understand \\n you can either open your result file with another file editor ( Wordpad , Notepad++ , Atom , Sublime Text , etc.) or replace the \\n by \\r\\n before writing it:

prettyJsonString = prettyJsonString.replace("\n", "\r\n");

FileReader and FileWriter are old utility classes that use the platform encoding. This gives non-portable files. And for JSON one ordinarily uses UTF-8.

Path datei = Paths.get(dateiname);
re = Files.newBufferedReader(datei, StandardCharsets.UTF_8);

Or

List<String> lines = Files.readAllLines(datei, StandardCharsets.UTF_8);
// Without line endings as usual.

Or

String text = new String(Files.readAllBytes(datei), StandardCharsets.UTF_8);

And later:

Files.write(text.getBytes(StandardCharsets.UTF_8));

It is problem with your text editor. Not with text. It incorrectly process new line character.

I suppose it expect CR LF (Windows way) symbols and Gson generate only LF symbol (Unix way).

After a quick search this topic might come handy.

Strings written to file do not preserve line breaks

Also, opening in another editor like the others said will help too

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM