Как правильно обслуживать данные JSON с помощью Python?

1

Я искал высоко и низко для ответа и не могу понять, что я делаю неправильно. Я создаю api, который возвращает данные json. Я бы предпочел, чтобы ответ был напечатан и в браузере, если это возможно. Что я делаю не так?

#!/usr/bin/python

import simplejson as json

class serve_json:
    def __init__(self):
        x = {"msg": "Some message", "error": "Some error"}

        html_to_display = 'Content-Type: application/json\n\n'
        html_to_display += json.dumps(x)
        print html_to_display

serve_json()

Вышеприведенный код не работает, и он не выводит результат в браузер. Если я изменил Content-Type на "text/html", он отлично отобразит на экране, но все еще не работает как данные json.

  • Я не использую фреймворк, все, что я делаю, это прямое python/javascript.
  • Этот скрипт выполняется по запросу HTTP POST.
  • Этот скрипт выполняется через /cgi

  • http://grouped.com/cgi-bin/upload_example.php (отлично работает)

  • http://grouped.com/cgi-bin/upload_example.py (Не работает - Content-Type = text/html)
  • Вышеупомянутый код также не работает и представляет собой пример, аналогичный приведенному выше, за исключением того, что Content-Type установлен в application/json
  • 1
    Как вы называете этот кусок кода из браузера? Через CGI? Apache? Вы действительно, действительно лучше использовать фреймворк для такого рода вещей.
  • 0
    Спасибо за предложение, Скотт. Я должен был быть более конкретным об этом, и я прошу прощения. Этот скрипт выполняется через CGI, как и в случае с жемчужным или PHP-скриптом. Он выполняется в результате запроса HTTP POST.
Показать ещё 6 комментариев
Теги:

1 ответ

3

Я бы порекомендовал бутылку, очень легко построить с ней простые услуги JSON:

from bottle import *

@get('/')
def serve_json():
    return {"msg": "Some message", "error": "Some error"}

run(host='localhost', port=8080)

Одна аккуратная особенность бутылки заключается в том, что она автоматически будет обслуживать JSON с маршрута, который возвращает dict. Вы можете выполнить python serve_json.py для запуска вашего приложения с помощью встроенного HTTP-сервера, разместить его как приложение WSGI и т.д.

  • 1
    святой .... это круто.
  • 0
    Привет, Zeekay, спасибо за предложение. Я немного смущен, хотя это не похоже на то, что я ищу. Так как я вызываю этот скрипт в результате запроса формы сообщения, у меня нет элемента управления, который был бы у меня, если бы я выполнял его внутри. Если бы я использовал php, я мог бы просто распечатать содержимое, например так: <? Php echo "{"; echo "error: 'Some error', \ n"; echo "msg: 'Некоторое сообщение' \ n"; echo "}"; ?> Но с Python по какой-то причине он не работает так же. У меня проблемы с пониманием почему.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню