将Json对象集合转换为数组

时间:2020-07-02 18:33:45

标签: json mule mule-studio dataweave mulesoft

我有一个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堆空间错误。有办法克服吗?还是可以将主文件拆分为多个文件,然后尝试这样做(也许在ForEach循环中?)。请指教

Edit1-在下面附加the子流:

    <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>

1 个答案:

答案 0 :(得分:7)

DW已经支持此格式。它称为ndjson。请访问documentation。您只需将 application / ndjson 设置为有效负载。