【发布时间】:2022-01-12 17:40:27
【问题描述】:
我正在尝试将InputStream 转换为JSON Array object,但没有正确获取JSON 对象,请在下面找到我的inputStream 记录:
{"id":4,"productId":9949940,"data":"product data 1","productPrice":"653.90"}
{"id":5,"productId":4940404,"data":"product data 2","productPrice":"94.12"}
我为每个项目和最后一条记录添加了额外的逗号 - 请在下面找到 java 代码。有人可以帮我解决这个问题。提前感谢您的帮助。谢谢!
Product.java
public void getProduct() {
String bucketName = "myProductBucket";
String key = "products/product-file";
StringBuilder sb = null;
JSONArray jsonArray = new JSONArray();
try(InputStream inputStream = s3Service.getObjectFromS3(bucketName, key);) {
sb = new StringBuilder();
sb.append("[");
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while((line = reader.readLine()) != null) {
sb.append(line).append(",");
}
sb.append("]");
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(sb.toString());
}
输出:
[{"id":4,"productId":9949940,"data":"product data 1","productPrice":"653.90"},,
{"id":5,"productId":4940404,"data":"product data 2","productPrice":"94.12"},]
预期输出:
[{"id":4,"productId":9949940,"data":"product data 1","productPrice":"653.90"},
{"id":5,"productId":4940404,"data":"product data 2","productPrice":"94.12"}]
【问题讨论】:
-
尝试使用
BufferedReader将InputStream中的字符串读出为StringBuilder,您可以将其转换为JsonObject:convert anInputStreamto aJsonObject。 -
整体而言,您的输入流内容并不代表有效的 JSON 内容。每个单独的 JSON 对象都是有效的,这就是 JSONObject 所消耗的,第一行/对象。
-
最后一个逗号出现,因为你无条件附加它,尝试相反:在下一个对象之前添加逗号如果缓冲区不为空。由于空行,对象之间的逗号可能会出现:在将
line提供给构建器之前对其进行测试。或者,您可以手动创建JSONArray,然后用JSONObjects逐一填充它,这(可以说)更容易,客观上更有效。
标签: java json inputstream