重构和重新格式化json api输出数据

时间:2017-06-14 19:17:56

标签: python 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语句嵌套for循环以匹配相应的玩家ID。我在解决重组方面遇到了麻烦。我是python的新手,非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我建议检查MongoDB,而不是将转换逻辑硬编码为python代码。它是一个基于JSON的文档数据库,您可以使用它创建此类查询。

这是一个非常简单的例子: https://docs.mongodb.com/manual/aggregation/

您的数据更复杂,但播放器与示例中的cust_id和游戏相似。

答案 1 :(得分: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"]

在我还在学习的过程中,我希望得到关于如何改进的反馈/意见。