【发布时间】:2020-07-03 13:49:48
【问题描述】:
我有一个 json 文件,其中包含许多 JSON 对象的集合。示例格式如下:
{"ID": 123,"Name": "TEST-1","val11": {},"url": "test1.com","val12": []}
{"ID": 456,"Name": "TEST-2","val21": {},"url": "test2.com","val22": []}
{"ID": 789,"Name": "TEST-3","val31": {},"url": "test3.com","val32": []}
如您所见,它不是一个数组([ ] 和逗号缺失)。我需要将其转换为有效的 JSON 数组。 我试过的代码是:
%dw 2.0
output application/json
var PayloadSplit = payload splitBy('\n')
var PayloadArray = (PayloadSplit map (value, index) -> read(value, 'application/json'))
---
PayloadArray
这适用于小型有效载荷。但是,如果我尝试对整个文件(大小约为 320 MB,带有 ~20k JSON 对象)执行此操作,则会失败并出现 java.lang.OutOfMemoryError: Java heap space 错误。有没有办法克服这个问题?或者我可以将主文件拆分为多个文件,然后尝试这个(也许在 ForEach 循环中?)。请指教
Edit1 - 在下面附加骡流:
<flow name="convert-object-to-array-test1Flow" doc:id="0645e9bd-7f77-4b1e-93d0-dedd9d154ef7" >
<http:listener doc:name="Listener" doc:id="551cd3b6-e4c8-4b7a-aff3-305effbe8a8b" config-ref="HTTP_Listener_config" path="/file"/>
<file:read doc:name="Read" doc:id="21a310c1-5887-4bc0-83b9-b8968e145f0d" path="C:\Desktop\NDJsonSample.json" outputMimeType="application/ndjson" />
<ee:transform doc:name="Transform Message" doc:id="95235c56-2f5a-4f39-ba96-8be7c4e501b5" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload]]></ee:set-payload>
</ee:message>
</ee:transform>
<logger level="INFO" doc:name="Logger" doc:id="935530dd-17fd-41c9-8fe0-1561ba3de703" />
</flow>
【问题讨论】:
标签: json mule mule-studio dataweave mulesoft