2017-03-03 81 views
0

我基本上想要获得“问题”中的所有键,并为每个键制作单独的记录。 说我有JSON数据,看起来是这样的:有没有办法让红字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

在每个结果中是否有固定数量的问题......即,所有结果都有疑问4-7? – systemjack

+0

不,这是我的主要问题,每个结果都有不同数量的问题,所以我不能给出具体的最小值和最大值。 –

+0

我现在要做的是基本上使用python获取所有的qid,并在包含该键的qid内创建一个新字段。 –

回答

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将其操作为最终表格。

+0

谢谢你的回应。我认为第一个例子可能是不可能的。我已经将问题加载到红移中的一列中,我将研究您提供的redshift json函数。感谢您的帮助! –

+0

其实你认为我可以通过Python中的数据并创建一个像这样的新字段: “questions”:{ “QID4”:{ “questionType”:{ “selector”:“TB” , “subSelector”:空 }, “QID”:QID4, “questionLabel”:空, “验证”:{ “doesForceResponse”:假 } 其中i追加一条QID 4到当前问题集? –

+0

我想我明白你要去哪里了。如果JSON中的每条记录都是其中一个问题,它可以工作。您只需要将“QUID4”作为值,而不是键名称,以便它可以进入表列。你不需要任何结果标题数据? – systemjack

相关问题