通过Python读写JSON

时间:2017-08-21 07:54:35

标签: python json

read.json文件:

{
    "Username" : "admin",
    "Password" : "admin",
    "Iterations" : 5,
    "Decimal" : 5.5,
    "tags" : ["hello", "bye"],
    "Value" : 5
}

program.py文件:

import json 
with open('read.json') as data_file:
    data = json.load(data_file)

data = str(data)
data.replace("'",'""',10)
f = open("write.json", "w")
f.write(data)

write.json文件:

{'Username': 'admin', 'Password': 'admin', 'Iterations': 5, 'Decimal': 5.5, 'tags': ["hello", "bye"], 'Value': 5}

我想要实现的目标:

  1. 从read.json文件中读取JSON数据
  2. 从我的程序中的JSON中解析并修改一些值
  3. 写入另一个write.json文件(采用JSON格式)
  4. 我的代码中没有错误,但write.json不包含双引号中的值(""),而是包含在单引号中的值,使其不是正确的JSON格式。

    需要做些什么更改才能使write.json文件包含正确的JSON格式,并且还要“写”'写入.json文件。

2 个答案:

答案 0 :(得分:6)

您可以直接将json数据转储到文件中。 Docs

import json
with open('read.json', 'w') as outfile:
    json.dump(data, outfile, sort_keys=True, indent=4)
    # sort_keys, indent are optional and used for pretty-write 

从文件中读取json:

with open('read.json') as data_file:    
    data = json.load(data_file)

答案 1 :(得分:4)

问题在于您正在使用python表示将字典转换为字符串,而python表示更喜欢简单的引号。

正如Vikash的回答所述,无需转换为字符串(您正在丢失结构)。更改您的数据,然后让json.dump处理dict到文本过程,这次遵循json格式,并使用双引号。

你的问题提到了“pretty”输出,你可以通过向json.dump

添加额外的参数来实现这一点
data["Username"] = "newuser"  # change data

with open("write.json", "w") as f:
    json.dump(data,f,indent=4,sort_keys=True)

现在文件内容是:

{
    "Decimal": 5.5,
    "Iterations": 5,
    "Password": "admin",
    "Username": "newuser",
    "Value": 5,
    "tags": [
        "hello",
        "bye"
    ]
}
  • indent:选择缩进级别。具有“漂亮”输出的好效果
  • sort_keys:如果设置,键按字母顺序排序,每次保证相同的输出(python键顺序是随机的)