2017-03-03 61 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

相關問題