从数据框创建嵌套的JSON

时间:2019-05-21 11:04:44

标签: python-3.x pandas

我有一个数据框,必须将其转换为嵌套的JSON。

countryname  name  text   score
UK           ABC   Hello  5

现在,我有一些生成JSON的代码,将countrynamename分组。 但是,我想首先按countryname分组,然后按name分组。下面是代码和输出:

cols = test.columns.difference(['countryname','name'])
j = (test.groupby(['countryname','name'])[cols]
   .apply(lambda x: x.to_dict('r'))
   .reset_index(name='results')
   .to_json(orient='records'))
test_json = json.dumps(json.loads(j), indent=4)

Output:
[
 {
  "countryname":"UK"
  "name":"ABC"
   "results":[
     {
      "text":"Hello"
      "score":"5"
     }
    ]
    }
   ]

但是,我期望这样的输出:

[
 {
  "countryname":"UK"
  {
  "name":"ABC"
   "results":[
     {
      "text":"Hello"
      "score":"5"
     }
    ]
    }
   }
   ]

任何人都可以帮助解决此问题吗?

1 个答案:

答案 0 :(得分:-1)

这将是有效的JSON。请注意,逗号,的使用是必需的,因为您可以选中here

[
 {
  "countryname":"UK",
  "name":"ABC",
   "results":[
     {
      "text":"Hello",
      "score":"5"
     }
    ]
    }
   ]

您尝试实现的其他输出也不符合标准:

[{
    "countryname": "UK",
    "you need a name in here": {
        "name": "ABC",
        "results": [{
            "text": "Hello",
            "score": "5"
        }]
    }
}]

我进行了改进,以便您可以确定要使用的名称。 对于自定义JSON输出,您需要首先使用自定义函数来重新格式化对象。

l=df.to_dict('records')[0] #to get the list
print(l, type(l)) #{'countryname': 'UK', 'name': 'ABC', 'text': 'Hello', 'score': 5} <class 'dict'>

e = l['countryname']
print(e) # UK

o=[{
    "countryname": l['countryname'],
    "you need a name in here": {
        "name": l['name'],
        "results": [{
            "text": l['text'],
            "score": l['score']
        }]
    }
}]

print(o) #[{'countryname': 'UK', 'you need a name in here': {'name': 'ABC', 'results': [{'text': 'Hello', 'score': 5}]}}]