从Json在Python中创建具有多个键值的嵌套Json结构

2024-05-16 13:01:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码如下:

import json

def reformat(importscompanies): 
    #print importscompanies

    container={}
    child=[]
    item_dict={}

    for name, imports in importscompanies.iteritems():
        item_dict['name'] = imports
        item_dict['size'] = '500'

        child.append(dict(item_dict))
        container['name'] = name
        container['children'] = child

if __name__ == '__main__':
    raw_data = json.load(open('data/bricsinvestorsfirst.json'))
    run(raw_data)

def run(raw_data):
    raw_data2 = raw_data[0]
    the_output = reformat(raw_data2)

我的问题是,代码没有遍历整个文件。它只输出一个条目。这是为什么?我是不是在重写什么东西,我是否需要在每个循环中附加另一个dict?

而且,似乎for循环正在为每个dict键遍历iteritems。有办法让它只通过一次吗?

问题确实是

 raw_data2 = raw_data[0]

我最终创建了一个迭代器来访问dict值。

谢谢。

最后,我希望最后的Json文件是这样的,使用上面提供的数据:

{'name': u'name', 'children': [{'name': u'500 Startups', 'size': '500'}, {'name': u'AffinityChina', 'size': '500'}]}

Tags: 代码namejsonchildfordatasizeraw
2条回答

“它只输出一个条目”,因为当您说raw_data2 = raw_data[0]时,您只选择JSON文件中的第一个字典

以这样的方式作为起点(我没有测试/运行它):

import json

def run():
    with open('data/bricsinvestorsfirst.json') as input_file:
        raw_data = json.load(input_file)

    children = []
    for item in raw_data:
        children.append({
            'name': item['name'],
            'size': '500'
        })

    container = {}
    container['name'] = 'name'
    container['children'] = children

    return json.dumps(container)

if __name__ == '__main__':
    print run()

试试这个。尽管您的示例输入和输出数据并没有提供很多关于“name”字段应该来自何处的线索。我以为你想要你的单子里原来的东西的名字。

original_json = json.load(open('data/bricsinvestorsfirst.json'),'r')

response_json = {}
response_json["name"] = "analytics"

# where your children list will go
children = []

size = 500 # or whatever else you want

# For each item in your original list
for item in original_json:
    children.append({"name" : item["name"],
                     "size" : size})

response_json["children"] = children

print json.dumps(response_json,indent=2)

相关问题 更多 >