为了账号安全,请及时绑定邮箱和手机立即绑定

在 Python 中读取和写入有效的 Json 文件输出

在 Python 中读取和写入有效的 Json 文件输出

慕森王 2021-10-12 15:31:37
import jsonimport osimport shutilimport time# import objectpathimport sysimport datetimetrue = "true"false = "false"null = "null"from datetime import datetime, timedeltawith open('./notificationsManagement/notifications.json') as json_file:    data = json.load(json_file)day_start = 30for tuple in data:    tuple['creationTime'] -=  int(timedelta(days = day_start).total_seconds())    day_start -= 2print(data)text_file = open("output.json", "w")text_file.write(str(data))text_file.close()我写了一个脚本,以便:读取 Json 文件执行修改打印数据将新的有效 Json 文件输出为“output.json”我遇到的几个问题:Json 的元组乱序数据在每个标题前用“u”打印新文件包含相同的“u”(主要问题)有什么建议?
查看完整描述

2 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

关于u'foo'

这是正常的 Python 行为,u'something'意味着您的字符串是 Unicode 字符串。在此处查看有关 Unicode 字符串的更多信息

您可以通过使用此行将您的dictJSON 字符串编写为 JSON 字符串来修复它,顺便说一句,您应该始终使用json.dump()(或json.dumps()) 来编写 JSON 字符串:

text_file.write(json.dump(data))

关于钥匙顺序

首先,JSON 的 RFC对此进行了明确说明:

对象是零个或多个名称/值对的无序集合,其中名称是字符串,值是字符串、数字、布尔值、空值、对象或数组。

在这里,“对象”的意思是“哈希”,这就是我们在 Python 中所说的“字典”。这意味着 JSON 字符串的键永远不会被排序。

而且,

data = json.load(json_file)加载一个 JSON 字符串并将其解析为 Python 字典。Python dicts 也没有排序(至少在 Python3.7 之前)。

这意味着两件事:

  1. 您无法按预期顺序读取 JSON 文件。

  2. 根据第 1 点,以特定顺序编写 JSON 字符串没有意义(因为您将无法以相同顺序读取它)


查看完整回答
反对 回复 2021-10-12
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

你确定这真的在运行吗?(清理所有.pyc)

数据是一个字典,您遍历键(字符串)并将它们视为字典

for tuple in data:    
    tuple['creationTime'] -=  int(timedelta(days = day_start).total_seconds())


查看完整回答
反对 回复 2021-10-12
  • 2 回答
  • 0 关注
  • 206 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信