【问题标题】:Convert Json objects Collection to Array将 Json 对象集合转换为数组
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答。请参考我在问题中的流程。但是,我得到的输出不是预期的格式。 "{\"ID\": 123,\"名称\": \"TEST-1\",\"val11\": {},\"url\": \"test1.com\",\"val12 \": []}\r\n{\"ID\": 456,\"名称\": \"TEST-2\",\"val21\": {},\"url\": \" test2.com\",\"val22\": []}\r\n{\"ID\": 789,\"名称\": \"TEST-3\",\"val31\": {} ,\"url\": \"test3.com\",\"val32\": []}"
    • 将mime类型更改为“application/x-ndjson”后它工作了谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多