如何使用 Java 将 InputStream 转换为 JsonArray 对象
How to convert InputStream to JsonArray Object using Java
我正在尝试将 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"}]
AFAIU,这是预料之中的,因为您的 JSON 对象仅部分有效。
虽然它也不是有效的 JSON 数组,但经过小的修改后可以解析为 JSONArray
(注意开始和结束括号以及对象之间的逗号):
[
{"id":4,"productId":9949940,"data":"product data 1","productPrice":"653.90"},
{"id":5,"productId":4940404,"data":"product data 2","productPrice":"94.12"}
]
或者,您可以手动将输入拆分为单独的 JSON 个对象,然后一个一个地解析它们。
根据您的产品详细信息文件,您的文件中没有有效的 JSON 数组对象。因此,无法直接从文件创建 JSON 数组。
您可以做的是,一条一条地阅读产品线并创建JSON对象并将其转换为JSON数组。请在下面找到可以提供帮助的代码。
Scanner s = new Scanner(new File("filepath")); //Read the file
JSONArray jsonArray = new JSONArray();
while (s.hasNext()){
JSONObject jsonObject = new JSONObject(s.next());
jsonArray.put(jsonObject);
}
//jsonArray can be print by iterating through it.
这是您可以使用的代码,想法是 InputStream 不代表有效的 JSON 因此您必须使用 StringBuilder 将其转换为有效的 JSON 字符串。但首先,您需要处理无效的 JSON。
StringBuilder sb;
try(InputStream inputStream = new FileInputStream(new File("Path"))) {
sb = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
JSONArray jsonArray = new JSONArray(sb.toString());
依赖关系
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20211205</version>
</dependency>
从文件内容中获取 Stream
到 List<String>
。
FileReader fileReader = null;
try {
File file = new File("path");
InputStream inputStream = new FileInputStream(file);
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
List<String> list = bufferedReader.lines().collect(Collectors.toList());
JSONArray array = new JSONArray();
for (String s : list) {
array.put(new JSONObject(s));
}
bufferedReader.close();
System.out.println(array);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (Objects.nonNull(null)) {
fileReader.close();
}
}
依赖关系:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20220320</version>
</dependency>
我正在尝试将 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"}]
AFAIU,这是预料之中的,因为您的 JSON 对象仅部分有效。
虽然它也不是有效的 JSON 数组,但经过小的修改后可以解析为 JSONArray
(注意开始和结束括号以及对象之间的逗号):
[
{"id":4,"productId":9949940,"data":"product data 1","productPrice":"653.90"},
{"id":5,"productId":4940404,"data":"product data 2","productPrice":"94.12"}
]
或者,您可以手动将输入拆分为单独的 JSON 个对象,然后一个一个地解析它们。
根据您的产品详细信息文件,您的文件中没有有效的 JSON 数组对象。因此,无法直接从文件创建 JSON 数组。
您可以做的是,一条一条地阅读产品线并创建JSON对象并将其转换为JSON数组。请在下面找到可以提供帮助的代码。
Scanner s = new Scanner(new File("filepath")); //Read the file
JSONArray jsonArray = new JSONArray();
while (s.hasNext()){
JSONObject jsonObject = new JSONObject(s.next());
jsonArray.put(jsonObject);
}
//jsonArray can be print by iterating through it.
这是您可以使用的代码,想法是 InputStream 不代表有效的 JSON 因此您必须使用 StringBuilder 将其转换为有效的 JSON 字符串。但首先,您需要处理无效的 JSON。
StringBuilder sb;
try(InputStream inputStream = new FileInputStream(new File("Path"))) {
sb = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
JSONArray jsonArray = new JSONArray(sb.toString());
依赖关系
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20211205</version>
</dependency>
从文件内容中获取 Stream
到 List<String>
。
FileReader fileReader = null;
try {
File file = new File("path");
InputStream inputStream = new FileInputStream(file);
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
List<String> list = bufferedReader.lines().collect(Collectors.toList());
JSONArray array = new JSONArray();
for (String s : list) {
array.put(new JSONObject(s));
}
bufferedReader.close();
System.out.println(array);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (Objects.nonNull(null)) {
fileReader.close();
}
}
依赖关系:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20220320</version>
</dependency>