有没有办法让json键成为redshift中的一个字段

时间:2017-03-03 18:21:58

标签: json amazon-redshift jsonpath

我基本上想要获得"问题"中的所有键。并为每个密钥创建单独的记录。 假设我的json数据看起来像这样:

"result": {
    "id": "dsgdsg",
    "name": "xxx",
    "expiration": {
        "startDate": null,
        "endDate": null
    },
    "questions": {
        "QID4": {
            "questionType": {
                "selector": "TB",
                "subSelector": null
            },
            "questionLabel": null,
            "validation": {
                "doesForceResponse": false
            }
        },
        "QID5": {
            "questionType": {
                "selector": "ML",
                "subSelector": null
            },
            "questionLabel": null,
            "validation": {
                "doesForceResponse": false
            }
        },
        "QID6": {
            "questionType": {
                "selector": "SAVR",
                "subSelector": "TX"
            },
            "questionLabel": null,
            "validation": {
                "doesForceResponse": false
            }

        },
        "QID7": {
            "questionType": {
                "selector": "SAVR",
                "subSelector": "TX"
            },
            "questionLabel": null,
            "validation": {
                "doesForceResponse": false
            }

        }

    }
    }

有没有办法使用jsonpaths将每个QID分别加载到自己的字段中并使用自己的记录?我已尝试过这方面的内容:

    {
"jsonpaths": [
    "$.result.id",
    "$.result.name",
    "$.result.questions.[0]"
]
}

但这仅提供QID4内的数据,依此类推。我可以以某种方式遍历jsonpaths吗?

1 个答案:

答案 0 :(得分:0)

如果您可以在Python端更改它,那么最好是每个JSON记录都是一个问题,如果需要,结果信息包含在每个JSON记录中。使用jsonpaths,数据文件实际上不是有效的JSON。它由单独的JSON blob组成,每个记录一个。

基于您的数据的两个此类记录的示例将是:

{
    "qid" : "QID4",  "result_id" : "dsgdsg", "result_name": "xxx",
    "result_expiration": { "result_startDate": null, "result_endDate": null },
    "questionType": { "selector": "TB", "subSelector": null },
    "questionLabel": null,
    "validation": { "doesForceResponse": false }
}
{
    "qid" : "QID5",  "result_id" : "dsgdsg", "result_name": "xxx",
    "result_expiration": { "result_startDate": null, "result_endDate": null },
    "questionType": { "selector": "ML", "subSelector": null },
    "questionLabel": null,
    "validation": { "doesForceResponse": false }
}

请注意,两条记录之间没有逗号。

然后jsonpaths就像:

{
"jsonpaths": [
    "$.qid",
    "$.result_name",
    "$.result_expiration.result_startDate",
    ...
]
}

如果这不可行,可能有一种方法可以将整个“$ .result.questions”元素作为JSON加载到临时/临时表中的字段中,并使用Redshift JSON functions将其操作到最终表中