2017-06-14 110 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