Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将值从列表插入嵌套的json_Python_Json_Django_Expression - Fatal编程技术网

Python 将值从列表插入嵌套的json

Python 将值从列表插入嵌套的json,python,json,django,expression,Python,Json,Django,Expression,我有一个嵌套的json,如下所示: [ { 'Name':'Anders', 'Type':'Hunter', 'Race':'Cyborg', }, { 'Name':'Karin', 'Type':'Titan', 'Race':'Human', }, { 'Name':'Jenny', 'Type':'Warl

我有一个嵌套的json,如下所示:

[
    {
        'Name':'Anders', 
        'Type':'Hunter', 
        'Race':'Cyborg', 
    },
    {
        'Name':'Karin', 
        'Type':'Titan', 
        'Race':'Human', 
    },
    {
        'Name':'Jenny', 
        'Type':'Warlock', 
        'Race':'Marsian', 
    },
]
['1', 'Ham', 'Spam', 'Bacon', '1', 'Ham', 'Cucumber', 'Tomato', '1', 'Wood', 'Potato', 'Herring']
    [
    {
        'Name':'Anders', 
        'Type':'Hunter', 
        'Race':'Cyborg',
        'string1':'1',
        'Food_1':'Ham',
        'Food_2':'Spam',
        'Food_3':'Bacon',
    },
    {
        'Name':'Karin', 
        'Type':'Titan', 
        'Race':'Human',
        'string1':'1',
        'Food_1':'Ham',
        'Food_2':'Cucumber',
        'Food_3':'Tomato',
    },
    {
        'Name':'Jenny', 
        'Type':'Warlock', 
        'Race':'Marsian',
        'string1':'1',
        'Food_1':'Wood',
        'Food_2':'Potato',
        'Food_3':'Herring',     
    },
]
我有一个字符串,看起来像这样:

[
    {
        'Name':'Anders', 
        'Type':'Hunter', 
        'Race':'Cyborg', 
    },
    {
        'Name':'Karin', 
        'Type':'Titan', 
        'Race':'Human', 
    },
    {
        'Name':'Jenny', 
        'Type':'Warlock', 
        'Race':'Marsian', 
    },
]
['1', 'Ham', 'Spam', 'Bacon', '1', 'Ham', 'Cucumber', 'Tomato', '1', 'Wood', 'Potato', 'Herring']
    [
    {
        'Name':'Anders', 
        'Type':'Hunter', 
        'Race':'Cyborg',
        'string1':'1',
        'Food_1':'Ham',
        'Food_2':'Spam',
        'Food_3':'Bacon',
    },
    {
        'Name':'Karin', 
        'Type':'Titan', 
        'Race':'Human',
        'string1':'1',
        'Food_1':'Ham',
        'Food_2':'Cucumber',
        'Food_3':'Tomato',
    },
    {
        'Name':'Jenny', 
        'Type':'Warlock', 
        'Race':'Marsian',
        'string1':'1',
        'Food_1':'Wood',
        'Food_2':'Potato',
        'Food_3':'Herring',     
    },
]
我想将字符串插入到json中,并使用值的名称。字符串中的每四个表示json中的每个人

最终结果应如下所示:

[
    {
        'Name':'Anders', 
        'Type':'Hunter', 
        'Race':'Cyborg', 
    },
    {
        'Name':'Karin', 
        'Type':'Titan', 
        'Race':'Human', 
    },
    {
        'Name':'Jenny', 
        'Type':'Warlock', 
        'Race':'Marsian', 
    },
]
['1', 'Ham', 'Spam', 'Bacon', '1', 'Ham', 'Cucumber', 'Tomato', '1', 'Wood', 'Potato', 'Herring']
    [
    {
        'Name':'Anders', 
        'Type':'Hunter', 
        'Race':'Cyborg',
        'string1':'1',
        'Food_1':'Ham',
        'Food_2':'Spam',
        'Food_3':'Bacon',
    },
    {
        'Name':'Karin', 
        'Type':'Titan', 
        'Race':'Human',
        'string1':'1',
        'Food_1':'Ham',
        'Food_2':'Cucumber',
        'Food_3':'Tomato',
    },
    {
        'Name':'Jenny', 
        'Type':'Warlock', 
        'Race':'Marsian',
        'string1':'1',
        'Food_1':'Wood',
        'Food_2':'Potato',
        'Food_3':'Herring',     
    },
]
我尝试了一些迭代,但总是失败:/


希望你能帮助我

我假设您的数据结构是python dict和list,而不是包含json文本的字符串

首先,将你的简单列表插入一个由4个项目组成的区块列表中。你可以阅读一些其他的方法

导致:

[['1', 'Ham', 'Spam', 'Bacon'], ['1', 'Ham', 'Cucumber', 'Tomato'], ['1', 'Wood', 'Potato', 'Herring']]
然后,同时迭代两个集合。您可以为此使用:

for entry, new_stuff in zip(existing_data, chunks):
    entry["string1"] = new_stuff[0]
    entry["Food_1"] = new_stuff[1]
    entry["Food_2"] = new_stuff[2]
    entry["Food_3"] = new_stuff[3]

在此之后,您的收藏应该与预期的一样。

答案1的备选方案:

json_list = [
    {
        'Name':'Anders', 
        'Type':'Hunter', 
        'Race':'Cyborg', 
    },
    {
        'Name':'Karin', 
        'Type':'Titan', 
        'Race':'Human', 
    },
    {
        'Name':'Jenny', 
        'Type':'Warlock', 
        'Race':'Marsian', 
    },]
foods = ['1', 'Ham', 'Spam', 'Bacon', '1', 'Ham', 'Cucumber', 'Tomato', '1', 'Wood', 'Potato', 'Herring']
for _ in json_list:
    _.update({'string1': foods[0], 'food_1': foods[1], 'food_2': foods[2], 'food_3': foods[3]})
    foods = foods[4:]
json_list
导致

[{'Race': 'Cyborg', 'food_3': 'Bacon', 'string1': '1', 'food_2': 'Spam', 'Name': 'Anders', 'Type': 'Hunter', 'food_1': 'Ham'}, {'Race': 'Human', 'food_3': 'Tomato', 'string1': '1', 'food_2': 'Cucumber', 'Name': 'Karin', 'Type': 'Titan', 'food_1': 'Ham'}, {'Race': 'Marsian', 'food_3': 'Herring', 'string1': '1', 'food_2': 'Potato', 'Name': 'Jenny', 'Type': 'Warlock', 'food_1': 'Wood'}]

一种简洁的方法是使用and函数将新数据分解成块

import json

data = [
    {
        'Name':'Anders', 
        'Type':'Hunter', 
        'Race':'Cyborg', 
    },
    {
        'Name':'Karin', 
        'Type':'Titan', 
        'Race':'Human', 
    },
    {
        'Name':'Jenny', 
        'Type':'Warlock', 
        'Race':'Marsian', 
    },
]

keys = ['string1', 'Food_1', 'Food_2', 'Food_3']
new_data = [
    '1', 'Ham', 'Spam', 'Bacon', 
    '1', 'Ham', 'Cucumber', 'Tomato', 
    '1', 'Wood', 'Potato', 'Herring',
]

# Create an iterator that yields chunks of length 4 from new_data
chunks = zip(*[iter(new_data)] * 4)

# Update the dicts in data with the new data
for d, t in zip(data, chunks):
    d.update(zip(keys, t))

# Convert to JSON
json_data = json.dumps(data, indent=4)
print(json_data)
输出

[
    {
        "Name": "Anders",
        "Type": "Hunter",
        "Race": "Cyborg",
        "string1": "1",
        "Food_1": "Ham",
        "Food_2": "Spam",
        "Food_3": "Bacon"
    },
    {
        "Name": "Karin",
        "Type": "Titan",
        "Race": "Human",
        "string1": "1",
        "Food_1": "Ham",
        "Food_2": "Cucumber",
        "Food_3": "Tomato"
    },
    {
        "Name": "Jenny",
        "Type": "Warlock",
        "Race": "Marsian",
        "string1": "1",
        "Food_1": "Wood",
        "Food_2": "Potato",
        "Food_3": "Herring"
    }
]
我们还可以将“分块”步骤放入主
for
循环中:

for d, t in zip(data, zip(*[iter(new_data)] * 4)):
    d.update(zip(keys, t))

但我认为上一个版本更具可读性。

您不需要直接修改JSON;对其进行解码,更新生成的数据结构,然后对修改后的数据结构重新编码。