You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ECL中如何处理批量JSON文件喷洒后缺失方括号的拼接逻辑文件?

问题:喷洒多JSON文件到HPCC Systems后缺失方括号,无法访问全部文件

我用DFUplus执行以下命令,将文件夹中多个JSON文件喷洒到HPCC Systems:

dfuplus action=spray server=http://localhost:8010/ srcip=10.0.2.15 prefix=FILENAME format=json srcfile=/var/lib/HPCCSystems/mydropzone/CSV/NEW2/*.json dstname=hthor::test dstcluster=mythor overwrite=1

ECL要求JSON为数组形式(示例):

[
    {
        "name": "hauserGermany",
        "place": 56.08
    },
    {
        "name": "hyou",
        "place": 59.03535
    }
]

但生成的逻辑文件缺失方括号,格式如下:

{
    "name": "hauserGermany",
    "place": 56.08
},
{
    "name": "hyou",
    "place": 56.03535
}

注意:方括号已缺失

这导致我只能访问第一个文件,无法读取目录中所有文件。请问有什么解决方案?如何为逻辑文件添加方括号,或者是否存在其他可自动添加方括号的多喷洒方式?

解决方案

方案1:修改喷洒命令,使用行分隔JSON格式(推荐)

HPCC Systems的DFUplus原生支持行分隔JSON(JSON Lines),无需数组包裹。调整命令将format参数改为jsonline:

dfuplus action=spray server=http://localhost:8010/ srcip=10.0.2.15 prefix=FILENAME format=jsonline srcfile=/var/lib/HPCCSystems/mydropzone/CSV/NEW2/*.json dstname=hthor::test dstcluster=mythor overwrite=1

同时确保源文件中每个JSON对象单独占一行,若原文件不是这种格式,可批量用jq转换:

for file in /var/lib/HPCCSystems/mydropzone/CSV/NEW2/*.json; do
    jq -c . "$file" > temp.json && mv temp.json "$file"
done

转换后文件示例:

{"name": "hauserGermany", "place": 56.08}
{"name": "hyou", "place": 56.03535}

这种格式下ECL可直接读取所有对象,无需额外处理。

方案2:预处理源文件,批量添加方括号

若必须保留数组格式,可先给每个源JSON文件添加首尾方括号,再执行喷洒:
编写shell脚本批量处理:

for file in /var/lib/HPCCSystems/mydropzone/CSV/NEW2/*.json; do
    echo "[" > temp.json
    cat "$file" >> temp.json
    echo "]" >> temp.json
    mv temp.json "$file"
done

处理完成后执行原喷洒命令即可,此时每个文件都是完整的JSON数组。

方案3:在ECL中修复缺失的方括号

如果已经完成喷洒,不想重新处理源文件,可在ECL中手动拼接方括号,将内容转为合法JSON数组:

// 读取逻辑文件原始内容
raw_content := DATASET('hthor::test', STRING, thor);

// 拼接首尾方括号,生成合法JSON数组
full_json_array := '[' || JOIN(raw_content, ',') || ']';

// 解析JSON为结构化数据集
parsed_data := JSON.Parse(full_json_array, {STRING name, REAL place});

OUTPUT(parsed_data);

内容的提问来源于stack exchange,提问作者encoded150

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 22:43:12