使用Python在for循环中合并“n”号JSON

esyap4oy  于 2023-08-08  发布在  Python
关注(0)|答案(3)|浏览(131)

我试图合并“n”个JSON文件,但我需要首先从filepath加载JSON,然后使用它。我提到下面的链接,但他们已经有可用的JSON数据,但在我的情况下,我想先加载JSON数据循环,然后合并它。我正在寻找一种通用的方法来做这件事。
How do I merge a list of dicts into a single dict?
我的代码:我想首先加载所有文件的json数据,然后合并它。我正在尝试类似下面的东西,但它不工作,并给予error as TypeError: str , bytes or ospath.like object, not Tuple

def merge_JsonFiles(*file):
   result = {}
   for f in file:
     json_data = loadjson(file)
     result = {**json_data}
   return result

   merge_JsonFiles(file1, file2, file3)

def loadjson(file)
     with open(file , 'r') as fh:
       return json.load(fh)

Merge logic for two files = {**file1, **file2)

字符串

2nc8po8w

2nc8po8w1#

我用下面的代码解决了这个问题

def merge_JsonFiles(*file):
   result = {}
   for f in file:       
     result = {**result, **loadjson(f)}
   return result

字符串

cnwbcb6i

cnwbcb6i2#

import json

def loadjson(file):
    with open(file , 'r') as fh:
        return json.load(fh)

def merge_JsonFiles(*files):
    result = {}
    for f in files:
        json_data = loadjson(f)
        result = {**result, **json_data}
    return result

merge_JsonFiles('file1.json', 'file2.json', 'file3.json')

字符串
在这段代码中,merge_JsonFiles函数接受任意数量的文件路径作为参数。然后使用loadjson函数逐个加载每个JSON文件,并将它们合并到一个字典中。最后,返回合并后的字典。

fdx2calv

fdx2calv3#

看起来你的代码有一些问题。让我们来看看它们,并提供一个merge_JsonFiles函数的修正版本:

  1. loadjson函数在其定义的末尾缺少冒号(:)。
  2. merge_JsonFiles函数未正确使用loadjson函数。您应该将文件路径(f)传递给loadjson函数,而不是传递所有文件的元组(file)。
    1.合并逻辑不正确。您应该使用每个加载的JSON数据更新result字典,而不是重复覆盖result字典。
    以下是代码的更正版本:
import json

def merge_JsonFiles(*files):
    result = {}
    for f in files:
        json_data = loadjson(f)
        result.update(json_data)
    return result

def loadjson(file):
    with open(file, 'r') as fh:
        return json.load(fh)

# Example usage:
merged_data = merge_JsonFiles("file1.json", "file2.json", "file3.json")
print(merged_data)

字符串
在这个修正后的版本中,merge_JsonFiles函数现在采用可变数量的文件路径(*files)并迭代每个文件。它使用loadjson函数从每个文件加载JSON数据,然后使用update()方法使用加载的JSON数据更新result字典。这样,所有文件中的数据将合并到一个字典中。

相关问题