gpt4 book ai didi

谷歌云平台上的JSON转NDJSON

转载 作者:行者123 更新时间:2023-12-05 04:13:00 28 4
gpt4 key购买 nike

我正在使用云存储、应用引擎和 bigquery 在 Google 云平台上开发原型(prototype)。

现在,其中一项任务是每天从谷歌云存储加载一个文件到我在 Appengine 上使用 Cron 任务的 bigquery

问题是 bigquery 期望数据采用 NDJSON 格式。(新行分隔 json)而我的源文件采用普通 JSON 格式。

目前,我将文件下载到我的笔记本电脑并将其转换为 NDJSOn,然后上传到 bigquery,但我如何在 google clould 平台上以编程方式执行此操作?我希望有可用的东西可以使用,因为我不想从头开始编写。

最佳答案

可能对其他人有用。我就是这样做的,但如果有更好或更简单的方法,请告诉我。需要下载云存储java API和依赖(http client api和oauth api): https://developers.google.com/api-client-library/java/apis/

需要下载jackson之类的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();

关于谷歌云平台上的JSON转NDJSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38848661/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com