如何使用Java将漂亮格式的JSON文件转换为单行JSON文件?

6

我需要将格式化的JSON文件转换为单行JSON文件,但是无法做到。有人能帮忙吗?

示例:以下内容需要转换:

[
 {
  "Employee ID": 1,
  "Name": "Abhishek",
  "Designation": "Software Engineer"
 },
 {
  "Employee ID": 2,
  "Name": "Garima",
  "Designation": "Email Marketing Specialist"
 }
]
[
   {
      "Employee ID": 1,
      "Name": "Abhishek",
      "Designation": "Software Engineer"
   },
   {
      "Employee ID": 2,
      "Name": "Garima",
      "Designation": "Email Marketing Specialist"
   }
]

转换为:

 '[{"Employee ID":1,"Name":"Abhishek","Designation":"Software Engineer"},' \ 
            '{"Employee ID":2,"Name":"Garima","Designation":"Email Marketing Specialist"}]'

如果你真的需要获取结果文件,而不是将整个文本存储在内存中,我不会使用下面的方法,而是逐行读取原始文件,进行修剪并将结果字符串写入输出文件:try (BufferedWriter/FileWiter output = ...; Stream<String> stream = Files.lines(Paths.get(fileName))) { stream.forEach( /* 修剪并将结果字符串写入output */ }。只存储实际需要的内容以完成工作,节省资源 :) - AnatolyG
没问题,谢谢! :) - Uncle Sam
4个回答

5

这是一个更好、更完整的答案,具有适当的错误处理和去除额外空格的功能。

参考答案的一个问题是它在没有使用.trim()的情况下使用了.concat()。如果一个非常嵌套的漂亮JSON缩进在最终输出中会显示为额外的空格。

String unprettyJSON = null;

try {
    unprettyJSON = Files.readAllLines(Paths.get("pretty.json"))
                        .stream()
                        .map(String::trim)
                        .reduce(String::concat)
                        .orElseThrow(FileNotFoundException::new);
} catch (IOException e) {
    e.printStackTrace();
}

使用 trim 输出:

[{"Employee ID": 1,"Name": "Abhishek","Designation": "Software Engineer"},{"Employee ID": 2,"Name": "Garima","Designation": "Email Marketing Specialist"}][{"Employee ID": 1,"Name": "Abhishek","Designation": "Software Engineer"},{"Employee ID": 2,"Name": "Garima","Designation": "Email Marketing Specialist"}]

不进行修剪的输出:

[ {  "Employee ID": 1,  "Name": "Abhishek",  "Designation": "Software Engineer" }, {  "Employee ID": 2,  "Name": "Garima",  "Designation": "Email Marketing Specialist" }][   {      "Employee ID": 1,      "Name": "Abhishek",      "Designation": "Software Engineer"   },   {      "Employee ID": 2,      "Name": "Garima",      "Designation": "Email Marketing Specialist"   }]

2
Domenico Sibilio和Harshal Parekh,一切都按预期运行,谢谢! - Uncle Sam
嗨@Harshal Parekh,它按预期工作,但我的JSON非常大,有没有办法使进程更快?对我来说需要一些时间。 - BHARAT GUPTA

2
如果您通过Files.readAllLines(Path)读取文件内容,则会将每一行作为列表中的不同项返回,然后您可以将它们合并成单个行。
例如:
String oneLine = Files.readAllLines(Paths.get("input.json"))
.stream()
.reduce(String::concat)
.orElseThrow();

System.out.println(oneLine);

0
try {
    unprettyJSON = Files.readAllLines(Paths.get("pretty.json"))
                        .stream()
                        .map(String::trim)
                        .reduce(String::concat)
                        .orElseThrow(FileNotFoundException::new);
} catch (IOException e) {
    e.printStackTrace();
}

这个解决方案很不错。感谢您发布它。您可以从一个.json文件中读取,将其转换为单行字符串,也可以用于POST https请求。


0

我正在使用sed来完成这个任务

sed ':a;N;$!ba;s/\n//g' demo.json

这基本上会将每个新行更改为同一行。 希望它有所帮助 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接