鱼C论坛

 找回密码
 立即注册
查看: 639|回复: 9

我拿到一个字典,然后要将其写入json中,得怎么弄

[复制链接]
发表于 2024-3-30 14:29:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我JSON中的内容如下:
[{"2023-12": "1"}, {"2024-01": "2"}]


然后我拿到一个字典, {"2024-01": "3333"}

得怎么弄

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-3-30 14:29:28 | 显示全部楼层
要将一个字典写入JSON文件中,可以使用Python内置的json模块。首先,你需要导入json模块:

import json

接下来,你需要将字典转换为JSON格式的字符串,可以使用json.dumps()方法:

data = {"2024-01": "3333"}
json_str = json.dumps(data)

然后,你可以打开一个文件,将JSON字符串写入文件中。假设文件名为data.json:

with open("data.json", "w") as file:
    file.write(json_str)

这样,字典的内容就被写入了JSON文件中。

最后提醒一下,如果你想在json文件中添加更多的键值对,可以先将原来的JSON文件读取出来,将其转换为字典,然后再更新字典的内容,并将更新后的字典重新写入JSON文件中。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-30 14:38:10 | 显示全部楼层
FishC 发表于 2024-3-30 14:29
要将一个字典写入JSON文件中,可以使用Python内置的json模块。首先,你需要导入json模块:

import json
...

    def insert_message(self,my_dict):

        self.month_sum_json = json.dumps(my_dict)

        with open("year_month.json","w") as to_f:

            to_f.write(self.month_sum_json)



为什么写不进去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-30 14:38:20 | 显示全部楼层
laiyuanjie 发表于 2024-03-30 14:38
def insert_message(self,my_dict):

        self. ...


你的代码看起来基本正确,但有一个可能导致写入失败的问题是,你没有将字典内容转换为JSON格式的字符串,而是直接将字典对象传给了json.dumps()方法。所以在写入文件之前,请确保你已经将字典转换为了JSON格式的字符串。

下面是一个修改后的示例代码:
import json

def insert_message(my_dict):
    month_sum_json = json.dumps(my_dict)
    with open("year_month.json", "w") as to_f:
        to_f.write(month_sum_json)

# 测试代码
data = {"2024-01": "3333"}
insert_message(data)

这样,字典的内容就会被正确地写入到名为"year_month.json"的JSON文件中。请确保文件路径正确,且程序有权访问该路径。如果仍然无法写入,请检查是否有其他因素阻止了写入操作。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-30 18:57:30 | 显示全部楼层
class InsertCar:
    def __init__(self):
        self.car_message_path = path_all.car_message_path
        with open(self.car_message_path, mode="r", encoding="utf-8") as car_list:
            car_txt = car_list.read()
        self.car = json.loads(car_txt)


    def insert_car_message(self,my_car):
        self.car_json = json.dumps(my_car)
        self.car.append(self.car_json)
        with open(self.car_message_path,"w") as to_car_f:
            json.dump(self.car,to_car_f)

这一段是我把车号车牌信息 写入json的代码
#------------


        self.num = self.new_car_num_str.get()
        self.license = self.new_car_license_str.get()

这两个是我从tkinter拿到的要新增的车牌车号。。。
#---------------------------

[{"num": "1", "lic": "\u7ca4M59780"}, {"num": "2", "lic": "\u7ca4MD6957"}, {"num": "3", "lic": "\u7ca4M57751"}]
这一段是我保存车号车牌的json文件的内容。。。

我要怎么把新拿到的车号车牌的信息写进这个json文件里面?我的代码错在哪里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-30 18:57:44 | 显示全部楼层
laiyuanjie 发表于 2024-03-30 18:57
class InsertCar:
    def __init__(self):
        ...


根据你提供的代码,首先需要确保变量`self.car_message_path`指向正确的JSON文件路径。另外,在`insert_car_message`方法中,你将车牌和车号信息转换为JSON格式后,将其作为字符串添加到了原始列表`self.car`中。然而,这样会导致列表中既包含json字符串,又包含字典。最好的做法是将新的车牌和车号信息直接添加到原始字典中,然后再将整个字典写入JSON文件。

下面是修改后的代码:
class InsertCar:
    def __init__(self):
        self.car_message_path = path_all.car_message_path
        with open(self.car_message_path, mode="r", encoding="utf-8") as car_list:
            self.car = json.load(car_list)  # 加载原始JSON文件中的数据为字典对象

    def insert_car_message(self, new_car):
        self.car["car_number"] = new_car.get("num")  # 将新的车号添加到字典中
        self.car["license_plate"] = new_car.get("license")  # 将新的车牌添加到字典中

        with open(self.car_message_path, "w") as to_car_f:
            json.dump(self.car, to_car_f)  # 将整个字典对象写入JSON文件

# 在其他地方调用InsertCar类的示例代码
data = {
    "num": "AB123",
    "license": "ABC123"
}

insert_car = InsertCar()
insert_car.insert_car_message(data)

这样,通过调用`insert_car_message`方法并传入新的车号和车牌信息,就可以将更新后的字典对象写入JSON文件中。请注意,`data`字典中的键名应与你在`insert_car_message`方法中使用的相同,即`"num"`和`"license"`。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-30 19:13:06 | 显示全部楼层
FishC 发表于 2024-3-30 18:57
根据你提供的代码,首先需要确保变量`self.car_message_path`指向正确的JSON文件路径。另外,在`insert ...

    self.car["num"] = new_car.get("num")
TypeError: list indices must be integers or slices, not str
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-30 19:13:22 | 显示全部楼层
laiyuanjie 发表于 2024-03-30 19:13
self.car = new_car.get("num")
TypeError: list ind ...


抱歉,我之前的回答有误导。在你的代码中,`self.car`是一个列表,而不是字典。因此,我们需要调整代码以正确处理列表中的字典元素。下面是修改后的代码:
class InsertCar:
    def __init__(self):
        self.car_message_path = path_all.car_message_path
        with open(self.car_message_path, mode="r", encoding="utf-8") as car_list:
            self.car = json.load(car_list)  # 加载原始JSON文件中的数据为列表
    
    def insert_car_message(self, new_car):
        num = new_car.get("num")
        license = new_car.get("license")
        car_dict = {"num": num, "license": license}  # 创建新的车辆字典
        self.car.append(car_dict)  # 将新的字典添加到列表中
        
        with open(self.car_message_path, "w") as to_car_f:
            json.dump(self.car, to_car_f)  # 将整个列表对象写入JSON文件

需要注意的是,我们创建了一个新的字典`car_dict`来存储车辆信息,并将其添加到`self.car`列表中。然后,我们将整个列表写入JSON文件中。

在其他地方调用`InsertCar`类的示例代码如下:
data = {
    "num": "AB123",
    "license": "ABC123"
}

insert_car = InsertCar()
insert_car.insert_car_message(data)

这样,通过调用`insert_car_message`方法并传入新的车号和车牌信息,就可以将更新后的列表对象写入JSON文件中。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-30 19:23:43 | 显示全部楼层
FishC 发表于 2024-3-30 19:13
抱歉,我之前的回答有误导。在你的代码中,`self.car`是一个列表,而不是字典。因此,我们需要调整代码 ...

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-30 19:23:54 | 显示全部楼层


不客气,如果还有其他问题,随时来问我!祝你编程学习顺利!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 12:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表