2017-06-14 107 views
-1

你好,我有一些JSON API輸出數據,我試圖重組/重新格式化。這是一個輸出示例:重構和重新格式化JSON API輸出數據

{ 
"playergamelogs: { 
    "gamelogs": [ 
    { 
     "game" : { 
     "date" : "2016-10-13" 
     "id" : "32637}, 
     "player": { 
     "ID": "4419"}, 
     "team" : { 
     "id" : "16}, 
     "stats" : { 
      "minutes": "10"} 
     }, 
     { 
     "game": { 
     "date" : "2016-10-17" 
     "id" : "33737}, 
     "player": { 
     "ID": "4419"}, 
     "team" : { 
     "id" : "16 
     }, 
     "stats" : { 
      "minutes": "10" 

我想要做的是按玩家id(或名稱)對數據進行分組。例如:

`{ 
    "playerlogs" : [ 
    { 
     "player" : { 
     "ID" : "4419" 
     "team" : { 
      "id" : "16" 
     }, 
     "gamelogs" : [ 
      { 
      "game" : {} 
      "game" : {} 
      } 
     } 
     "player" : { 
     .... 
     } 
     }` 

,我能想到做到這一點是嵌套使用dict.items()循環和if語句來匹配相應的播放器ID的最好的辦法。我正在以最有效的方式進行重組,而遇到麻煩。我相當新的python和任何幫助,不勝感激。

+0

到目前爲止你試過了什麼? –

+0

從一開始就沒有必要去「最有效的方式」。只要確保它能夠正常工作並且稍後關心優化。 –

+0

抱歉不想混淆最初的帖子。我已經添加了我所嘗試的 – Maarten

回答

0

這是我如何能解決我最初的問題,並重新格式化原始數據:

for i in range(0,len(dataedit)): 
playerID = dataedit[i]["player"]["ID"] 
if not any(p.get('player',{}).get('ID',{}) == playerID for p in playerlog): 
    playerlog.append({}) 
    playerlog[x]["player"] = dataedit[i]["player"] 
    x+=1 
gameID = dataedit[i]["game"]["id"] 
playerlog[x-1]["player"]["game" + gameID] = dataedit[i]["game"] 
playerlog[x-1]["player"]["game" + gameID]["stats"] = dataedit[i]["stats"] 
playerlog[x-1]["player"]["game" + gameID]["team"] = dataedit[i]["team"] 

由於我還在學習,我希望得到關於如何提高反饋/意見。

0

而不是將您的轉換邏輯硬編碼爲python代碼,我建議檢查MongoDB。它是基於JSON的文檔數據庫,您可以使用它創建此類查詢。

這是一個很簡單的例子: https://docs.mongodb.com/manual/aggregation/

你的數據是比較複雜的,但玩家類似於CUST_ID和遊戲中的示例數量。

+0

以上的感謝回覆和信息!我正試圖在mongodb方向前進。我想最終將api數據存儲在mongoDB中。我在添加到mongoDB之前試圖清理數據。將原始輸出存儲在MongoDB中,然後使用查詢清理數據是否更好? – Maarten

+0

如果你無論如何都想使用MongoDB,那麼爲什麼不使用它呢?使用現有的工具比重新創建它更容易。我會創建一個MongoDB集合,並將這些項目作爲單獨的文檔存儲在「遊戲日誌」列表中。 – fcs