我有一个对象数组。我需要将其转换为.jsonl格式并使用lambda函数中的node作为响应发送 我一直在尝试将其更改为字符串,并添加'\ n'使其换行,但没有成功
答案 0 :(得分:2)
生成JSON行的简单代码。 jsonlines实际上只是一串单行的JSON对象,它们之间用换行符进行了字符串化和连接。就这样
您需要处理的另一个问题是转义unicode,因此在写入文件时,必须使用UTF-8编码。
使用jsonlines npm库的repl.it演示库:https://repl.it/repls/AngelicGratefulMoto
简单的普通JS演示:
data = [{ jsonlines: 'is awesome' },{ jsonlines: 'is awesome' },{ jsonlines: 'is awesome' },{ jsonlines: 'is awesome' },{ jsonlines: 'is awesome' }]
console.log(
data.map(x=>JSON.stringify(x)).join('\n')
)
答案 1 :(得分:2)
解决从 .json
到 .jsonl
的大量数据转换问题的方法:
在实施@user120242 的答案之前猴子修补试验失败,因为数据中存在 {
、}
、[
、]
const sampleData = [{ jsonlines: 'is awesome' },{ jsonlines: 'is awesome' },{ jsonlines: 'is awesome' },{ jsonlines: 'is awesome' },{ jsonlines: 'is awesome' }]
console.log(JSON.stringify(sampleData).replace('[', '').replace(']', '').replaceAll('},{', '}\n{'));
@user120242
的答案适用于较小的数据(我想要一个尽可能不受任何外部库或包的影响的解决方案),并且确实是一个干净的解决方案,它对我有效是 ~100 MB
的 array of objects
,除此之外它失败了(我的解决方案在 node.js v14.1.0
中工作,由 Docker version 20.10.5, build 55c4c88
使用 DockerOperator
在 airflow v2.0.1
upto data这是 ~100 MB
的 array of objects
并且它在 ~750 MB
的 array of objects
范围内的数据严重失败 - JSON.stringify throws RangeError: Invalid string length for huge objects)
将 https://dev.to/madhunimmo/json-stringify-rangeerror-invalid-string-length-3977 转换为 .json
的与 .jsonl
类似的解决方案的跟踪与上述相同的问题不起作用 - JSON.stringify throws RangeError: Invalid string length for huge objects
从 @Bergi
's answer 实现 for...of
- Using async/await with a forEach loop 取得了很好的性能(我的实现在 node.js v14.1.0
中工作,由 Docker version 20.10.5, build 55c4c88
使用 { {3}} 在 DockerOperator
中,最多为 ~750 MB
of array of objects
)
const fsPromises = require('fs').promises;
const writeToFile = async () => {
const dataArray = [{ jsonlines: 'is awesome' },{ jsonlines: 'is awesome' },{ jsonlines: 'is awesome' },{ jsonlines: 'is awesome' },{ jsonlines: 'is awesome' }];
for (const dataObject of dataArray) {
await fsPromises.appendFile( "out.jsonl" , JSON.stringify(dataObject) + "\n");
}
}
附言:如果您尚未提供高于默认值 >100 MB
的额外内存,您将面临 airflow v2.0.1
更大的数据(通常为 node.js v14.1.0
),以下内容适用于 {{1} }}(将 Dockerfile
替换为您要分配的 6144
中的内存量)
MB