我有一个数据框,必须将其转换为嵌套的JSON。
countryname name text score
UK ABC Hello 5
现在,我有一些生成JSON的代码,将countryname
和name
分组。
但是,我想首先按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"
}
]
}
}
]
任何人都可以帮助解决此问题吗?
答案 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}]}}]