【问题标题】:Need help! - Unable to load JSON using COPY command需要帮忙! - 无法使用 COPY 命令加载 JSON
【发布时间】:2015-09-24 17:16:47
【问题描述】:

这里需要您的专业知识!

我正在尝试使用以下格式的复制命令将JSON 文件(由JSON 转储生成)加载到redshift

[
{
    "cookieId": "cb2278", 
    "environment": "STAGE", 
    "errorMessages": [
        "70460"
    ]
}
,
{
    "cookieId": "cb2271", 
    "environment": "STG", 
    "errorMessages": [
        "70460"
    ]
}
]

我们遇到了错误 - “无效的 JSONPath 格式:成员不是对象。”

当我试图摆脱方括号 - [] 并删除 JSON dicts 之间的“,”逗号分隔符时,它加载得非常好。

{
    "cookieId": "cb2278", 
    "environment": "STAGE", 
    "errorMessages": [
        "70460"
    ]
}

{
    "cookieId": "cb2271", 
    "environment": "STG", 
    "errorMessages": [
        "70460"
    ]
}

但实际上大多数来自 API 的 JSON 文件都有这种格式。 我可以进行字符串替换或 reg ex 来摆脱 , 和 [] 但我想知道是否有更好的方法可以在不修改文件的情况下无缝加载到 redshift

【问题讨论】:

    标签: json postgresql python-3.x amazon-redshift


    【解决方案1】:

    将 JSON 数组转换为数组元素流的一种方法是将前者通过管道传输到 jq '.[]'。输出被发送到标准输出。

    如果 JSON 数组位于名为 input.json 的文件中,则以下命令将在标准输出上生成数组元素流:

    $ jq ".[]" input.json
    

    如果您希望以 jsonlines 格式输出,请使用 -c 开关(即jq -c ......)。

    有关 jq 的更多信息,请参阅https://stedolan.github.io/jq

    【讨论】:

    • 谢谢@peak!我想知道 redshift 是否有任何功能可以使用这种格式?还想知道是否有 pythonic 方式将第二种格式加载到 dict 中? {“cookieId”:“cb2278”,“环境”:“STAGE”,“errorMessages”:[“70460”]} {“cookieId”:“cb2271”,“环境”:“STG”,“errorMessages”:[“ 70460"] }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 2011-08-07
    相关资源
    最近更新 更多