Flask-RESTful API не возвращает словарь в формате json - PullRequest
1 голос
/ 01 мая 2019

Я использую флакон-успокоительный API.Когда я изменяю debug=True на debug=False, я не получаю данные в формате json.Это пример кода:

from flask import Flask, jsonify, Response
from flask_restful import Resource, Api
import json

app = Flask(__name__)

# Create the API
api = Api(app)

@app.route('/')
def index():
    return "HELLO WORLD"


class tests(Resource):

    def get(self):
        #return json.dumps({"A":1, "B":2}, sort_keys=False, indent=4)
        return jsonify({"A":1, "B":2}) 

api.add_resource(tests, '/<string:identifier>')

if __name__ == '__main__':
    app.run(debug=False)

с json.dumps (словарь) возвращает:

"{\n \"A\": 1,\n \"B\": 2\n}"

но я ожидаю:

{
  "A": 1,
  "B": 2
 }

1 Ответ

0 голосов
/ 10 мая 2019

Определенный ресурс является причиной вашей проблемы, поскольку он требует, чтобы вы передавали "self" внутренним функциям.Определение класса как объекта вместо ресурса позволит обойти это, в то же время позволяя передавать аргументы функции, такие как id, как показано в get_tests_id ().

from flask import Flask, json
from flask_restful import Api

app = Flask(__name__)

# Create the API
api = Api(app)


@app.route('/')
def index():
    return "HELLO WORLD"


class Tests(object):

    # function to get all tests
    @app.route('/tests', methods=["GET"])
    def get_tests():
        data = {"A": 1, "B": 2}
        return json.dumps(data, sort_keys=False, indent=4), 200

    # function to get tests for the specified id("A" or "B" in this case) 
    @app.route('/tests/<id>', methods=["GET"])
    def get_tests_id(id):
        data = {"A": 1, "B": 2}
        return json.dumps({id: data.get(id)}, sort_keys=False, indent=4), 200


if __name__ == '__main__':
    app.run(debug=False)

Предполагается, что вы используете APIна порту 5000 и тестировании его с хоста, следующие URL-адреса могут использоваться для доступа к вашим данным из веб-браузера:

'localhost: 5000 / tests' - URL-адрес для получения всех тестов

'localhost: 5000 / tests / A' - URL-адрес для получения тестов с id = "A"

'localhost: 5000 / tests / B' - URL-адрес для получения тестов с id = "B"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...