写入和读取JSON文件

时间:2018-04-25 19:55:24

标签: python html json flask

我正在编写一个脚本来检查json文件是否存在。如果是,则使用flask render_template 函数来使用数据加载网页。如果没有,脚本将查询数据库,将数据放入json格式,然后创建并写入json文件。这是一些示例代码。

from flask import render_template
import json
import os

title = "Tests"
jsonFile = "tests.json"
if os.path.exists(jsonFile):
    return render_template('tests.html', title=title, data='tests')
else:
    data = '{"tests":[{"id":"1","ip_addy":"IP1","name":"name1"},
                      {"id":"2","ip_addy":"IP2","name":"name2"},
                      {"id":"3","ip_addy":"IP3","name":"name3"}
                     ]}'
    with open(jsonFile, "w+") as f:
        json.dump(data, f)
    f.close()
    return render_template('tests.html', title=title, data=data)

它写入 test.json 文件就好了,但是当我在创建 test.json 后重新加载 tests.html 页面时, html说没有要显示的记录。我是否错误地创建了json文件?

2 个答案:

答案 0 :(得分:1)

正如@Simon Johansson所提到的,问题似乎是你没有阅读文件的内容。做出这种改变似乎对我有用。

@app.route('/test')
def test():
    title = "Tests"
    jsonFile = "tests.json"
    if os.path.exists(jsonFile):
        file_data = ""
        try:
            with open(jsonFile) as f:
                file_data = f.read()
        except:
            file_data = "could not read file"
        return render_template('tests.html', title=title, data=file_data)
    else:
        data = {"tests":[{"id":"1","ip_addy":"IP1","name":"name1"},
                          {"id":"2","ip_addy":"IP2","name":"name2"},
                          {"id":"3","ip_addy":"IP3","name":"name3"}
                         ]}
        with open(jsonFile, "w+") as f:
            json.dump(data, f)
        f.close()
        return render_template('tests.html', title=title, data=data)

我尝试在编写后修改文件数据,并且更改的数据确实正确显示,表示如果存在,则从文件ok中读取数据。

我使用了简单的模板\ tests.html

<html><head><title>{{title}}</title></head>
<body>Data:<br>{{data}}</body>
</html>

答案 1 :(得分:1)

这是问题的解决方案,感谢Simon和J. Fay。必须以json编写和读取数据。

@app.route('/test')
def test():
    title = "Tests"
    jsonFile = "tests.json"
    if os.path.exists(jsonFile):
        file_data = ""
        try:
            with open(jsonFile) as f:
                file_data = json.load(f)
            f.close()
        except:
            file_data = "could not read file"
        return render_template('tests.html', title=title, data=file_data)
    else:
        data = {"tests":[{"id":"1","ip_addy":"IP1","name":"name1"},
                         {"id":"2","ip_addy":"IP2","name":"name2"},
                         {"id":"3","ip_addy":"IP3","name":"name3"}
                         ]}
        with open(jsonFile, "w+") as f:
            json.dump(data, f)
        f.close()
        return render_template('tests.html', title=title, data=data)