我基本上想要获得"问题"中的所有键。并为每个密钥创建单独的记录。 假设我的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吗?
答案 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将其操作到最终表中