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

时间:2019-01-16 11:58:30

标签: python json

import json
import os
import shutil
import time
# import objectpath
import sys
import datetime
true = "true"
false = "false"
null = "null"

from datetime import datetime, timedelta


with open('./notificationsManagement/notifications.json') as json_file:
    data = json.load(json_file)


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

print(data)

text_file = open("output.json", "w")
text_file.write(str(data))
text_file.close()

我写了一个脚本是为了:

  1. 读取Json文件
  2. 执行修改
  3. 打印数据
  4. 将新的有效Json文件输出为“ output.json”

我鼓励了一些问题:

  1. Json的元组故障
  2. 数据在每个标题之前都印有'u'
  3. 新文件包含相同的“ u”(主要问题)

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

关于u'foo'

这是正常的Python行为,u'something'表示您的字符串是Unicode字符串。 see more about Unicode strings here

只需使用此行将dict编写为JSON字符串即可解决此问题,但是您应该始终使用json.dump()(或json.dumps())写入JSON字符串:

text_file.write(json.dump(data))

关于按键顺序

首先,JSON's RFC对此是明确的:

  

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

在这里,“ object ”的意思是“ 哈希”,这就是我们在Python中所称的“ 字典”。这意味着从不对JSON字符串的键进行排序。

此外

data = json.load(json_file)加载JSON字符串并将其解析为Python字典。 既不对Python字典进行排序(至少在Python3.7之前)。

这意味着两件事:

  1. 您无法按预期顺序读取JSON文件。
  2. 根据第1点,以特定的顺序写入JSON字符串没有意义(因为您将无法以相同的顺序读取它)

答案 1 :(得分:0)

关于问题2和3。

您应该在没有Unicode输出的情况下将其打印出来。

有关编写JSON文件的参考。

How do I write JSON data to a file?

关于问题3:

如果您想订购成为保存者,则应使用IButton

How to preserve ordering of items in a python dictionary?

答案 2 :(得分:0)

您确定该程序实际上正在运行吗? (清理所有.pyc)

数据是字典,您遍历键(字符串)并将其像字典一样对待

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