Запись в и чтение из файла JSON - PullRequest
0 голосов
/ 25 апреля 2018

Я пишу скрипт, чтобы проверить, существует ли файл 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 , но когда я перезагружаю страницу tests.html после создания test.json , html говорит, что нет записей для отображения.Я создал файл JSON неправильно?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Это решение проблемы, благодаря Саймону и Дж. Фэй.Данные должны быть записаны и прочитаны как 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)
0 голосов
/ 25 апреля 2018

Как упоминает @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)

Я попытался изменить данные файла после записи, и измененные данные отображаются правильно, указывая на то, что данные считываются из файла нормально, если они присутствуют.

Я использовал простые шаблоны \ tests.html

<html><head><title>{{title}}</title></head>
<body>Data:<br>{{data}}</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...