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.