使用Python中的多个键值从Json创建嵌套的Json结构

Lea*_*ple 6 python json ipython python-3.x d3.js

我的代码如下:

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)
Run Code Online (Sandbox Code Playgroud)

我的问题是,代码没有通过整个文件.它只输出一个条目.为什么是这样?我是否正在重写某些内容,是否需要在每个循环中附加的另一个dict?

而且,似乎for循环正在通过每个dict键的iteritems.有没有办法让它只通过一次?

问题确实如此

 raw_data2 = raw_data[0]
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

最后,我希望我的最终Json文件看起来像这样,使用我上面提供的数据:

{'name': u'name', 'children': [{'name': u'500 Startups', 'size': '500'}, {'name': u'AffinityChina', 'size': '500'}]}
Run Code Online (Sandbox Code Playgroud)

eri*_*ang 11

试试这个.虽然您的示例输入和输出数据并未真正提供有关"名称"字段应来自何处的许多线索.我假设你想要列表中原始项目的名称.

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)
Run Code Online (Sandbox Code Playgroud)


s16*_*16h 3

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

尝试像这样作为起点(我还没有测试/运行它):

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()
Run Code Online (Sandbox Code Playgroud)