Afficher contenue d'un fichier

Résolu/Fermé
Utilisateur anonyme - Modifié le 3 oct. 2018 à 21:07
 Utilisateur anonyme - 4 oct. 2018 à 19:58
bonjour,

je cherche a afficher le contenue entier d'un fichier.json sur une page web (actuellement en local)
mais je n'y parvient pas ...

je le réclame de cette manière : "0.0.0.0:5000\about.json"

toute mes tentative sont resté sans résultat.
voici mon code qui d’après moi s’avère être le plus proche de ce que je recherche mais qui reste bugé.

import json


@app.route("/about.json")
def about():
    with open('about.json') as json_data:
        data_dict = json.load(json_data)
    txt = json.dumps(data_dict)
    html = "{txt}"
    return html.format(txt=txt)


et voici les erreurs reçus (une partie uniquement car trop nombreuse) :

 File "app.py", line 27, in about
web_1    |     data_dict = json.load(json_data)
web_1    |   File "/usr/local/lib/python3.4/json/__init__.py", line 268, in load
web_1    |     parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
web_1    |   File "/usr/local/lib/python3.4/json/__init__.py", line 318, in loads
web_1    |     return _default_decoder.decode(s)
web_1    |   File "/usr/local/lib/python3.4/json/decoder.py", line 343, in decode
web_1    |     obj, end = self.raw_decode(s, idx=_w(s, 0).end())
web_1    |   File "/usr/local/lib/python3.4/json/decoder.py", line 359, in raw_decode
web_1    |     obj, end = self.scan_once(s, idx)
web_1    | ValueError: Expecting ',' delimiter: line 25 column 20 (char 767)
web_1    | 172.18.0.1 - - [03/Oct/2018 18:55:55] "GET /about.json HTTP/1.1" 500 -


merci de votre aide, j’espère que une fois de plus vous parviendrais a me sortir de cette galére
A voir également:

3 réponses

Bonsoir.

Une url s'écrit avec des slashs et non des backslashs.

Et lorsque tu dis que tu n'y parviens pas, tu n'as même pas une erreur 404 ?
Quel serveur ?
0
Astrocurieux
4 oct. 2018 à 07:24
Simple erreur d'inattention pour l'URL désolé.

Je reçois une erreur interne sur ma page.
Elle n'est pas hébergé sur un serveur mais en local.

Merci de ton aide
0
jortu > Astrocurieux
4 oct. 2018 à 09:26
Je ne comprends pas, l'adresse http://0.0.0.0/ correspond bien normalement à un serveur local en localhost.

Et puis je ne comprends pas non plus le rapport avec python, tu devrais préciser bien plus de choses, car pour le moment, ton problème est vague.
0
Utilisateur anonyme
4 oct. 2018 à 12:25
pour être plus precis voici mon code complet:

j'essaie d'utiliser les conteneurs Docker, j'ai donc un docker-compose et une app.py que voici :

from flask import Flask
from redis import Redis, RedisError
import os
import socket
import json

# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)

app = Flask(__name__)

@app.route("/")
def hello():
    try:
        visits = redis.incr("counter")
    except RedisError:
        visits = "<i>cannot connect to Redis, counter disabled</i>"

    html = "<h3>Hello {name}!</h3>" \
           "<b>Hostname:</b> {hostname}<br/>" \
           "<b>Visits:</b> {visits}"
    return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)

@app.route("/about.json")
def about():
    with open('about.json') as json_data:
        data_dict = json.load(json_data)
    txt = json.dumps(data_dict)
    html = "{txt}"
    return html.format(txt=txt)

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000)


ce code me crée une page web en 0.0.0.0:5000 et si j'ajoute a l'url ceci : 0.0.0.0:5000/about.json
je desire afficher ce que contient mon fichier about.json contenue a la racine de mon projet.
et c'est ici que ca bug ...
0
Salut,

Donc, oui, tu as bien un serveur local sur le port 5000 ^^

J'ai testé ton script et cela fonctionne parfaitement.
http://0.0.0.0:5000/about.json affiche bien chez moi le contenu du fichier, bon l'affichage est pourri :D, autant filer directement le fichier json brut au navigateur puisqu'il peut l'afficher bien formaté (tout du moins firefox)

Donc je soupçonne que le chemin vers ton fichier json n'est pas correct.
Et quand tu dis que ça bug, il se passe quoi au juste ? Il faut être plus précis.
0
Utilisateur anonyme
4 oct. 2018 à 13:27
quand je réclame mon fichier j'obtient ca sur ma page web : Internal Server Error
The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.

je me suis pas trompé dans le chemin du fichier, c'est agréable de savoir que ca fonctionne chez toi mais du coup je suis deg que ce soi pas la meme de mon coté.

comment ferais tu pour directement fournir le fichier au navigateur ? tu peut me faire un petit exemple ?
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
4 oct. 2018 à 13:17
'lut,
ton fichier
json
est invalide/corrompu.
De plus, tu l'interprètes pour le re-sortir tel quel, puis tu utilises
.format()
pour rien.
Essaie tout simplement:
@app.route("/about.json")
def about():
    with open('about.json', 'rb') as json:
        return Response(json.read(), mimetype='application/json')
0
Utilisateur anonyme
4 oct. 2018 à 13:40
je viens de tester ton code ElementW, j'obtient le même message d'erreur que précédemment.
du coup je me demande si effectivement le soucis viens pas de mon fichier.json lui meme
0
jortu > Utilisateur anonyme
4 oct. 2018 à 17:23
Bah oui, tu as deviné, c'est bien ton fichier json le problème, d'ailleurs pour t'en assurer, ouvre le avec ton navigateur sans passer par ton serveur.

Avec un fichier syntaxiquement incorrect, firefox le signale.

Par exemple.
SyntaxError: JSON.parse: expected ',' or ']' after array element at line 38 column 1 of the JSON data
0
Utilisateur anonyme
Modifié le 4 oct. 2018 à 17:33
quand je fait un clic/glisser sur mon navigateur avec mon fichier il me l'ouvre tel qu'elle pourtant ....
je vais creusé dans cette direction
0
Utilisateur anonyme
4 oct. 2018 à 17:45
il manque une virgule dans mon fichier.json ....
mon affichage ce fait correctement meme si avec ma fonction c'est effectivement pas terrible du tout comme le disait jortu.

je ne parvient pas a tester la tienne j'ai cette erreur :

NameError: name 'Response' is not defined


as tu un import ou quelque chose d'autre a ajouter ? je débute totalement désolé si c'est evident....
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225 > Utilisateur anonyme
4 oct. 2018 à 19:27
from flask import Response
0