可能对其他人有用。我就是这样做的,但如果有更好或更简单的方法,请告诉我。需要下载云存储java API和依赖(http客户端api和oauth api):
https ://developers.google.com/api-client-library/java/apis/
需要下载像杰克逊这样的JSON解析器。
步骤:
1> 使用java云存储API读取json文件作为inputstream
Storage.Objects.Get getObject = client.objects().get("shiladityabucket", "abc.json");
InputStream input = getObject.executeMediaAsInputStream();
2>转换成Java对象数组(我的json文件有多个记录)。如果是单条记录,则不需要数组。
ObjectMapper mapper = new ObjectMapper();
BillingInfo[] infoArr = mapper.readValue(input, BillingInfo[].class);
3> 创建一个 StorageObject 上传到云存储
StorageObject objectMetadata = new StorageObject()
// Set the destination object name
.setName("abc.json")
// Set the access control list to publicly read-only
.setAcl(Arrays.asList(
new ObjectAccessControl().setEntity("allUsers").setRole("READER")));
4> 遍历数组中的对象并将它们转换为 json 字符串。为 ndjson 添加换行符。
for (BillingInfo info:infoArr) {
jSonString += mapper.writeValueAsString(info);
jSonString += "\n";
}
5> 使用云存储 java api 创建要插入的 Inputstream
InputStream is = new ByteArrayInputStream(jSonString.getBytes());
InputStreamContent contentStream = new InputStreamContent(null, is);
6> 上传文件
Storage.Objects.Insert insertRequest = client.objects().insert(
"shiladitya001", objectMetadata, contentStream);
insertRequest.execute();