Estoy trabajando con una API tranquila, escrita por un ex compañero de trabajo, cuando uso un GET para enviar un json desde la API del matraz a la interfaz y luego invoco el valor en el json, obtengo una cadena en lugar de una matriz, la lista Se ve como esto
['ETH/BTC','LTC/BTC','BNB/BTC']
Esto es lo que creo que es relevante del código
La ruta:
@bp.route('/fetch_bots_names', methods=['GET']) def fetch_bots_names(): user_id = current_user.get_id() bots = db.session.query(Bot).all() viewable_bots = db.session.query(BotUserCanView).all() user_bots = [] names = [] for x in bots: ub = get_bot_data_as_dict(x) if ub != None: names.append(ub['name']) return {'ok': True, 'msg':'Success', 'data': json.dumps(names)}, 200El JS para obtener los datos.
const [botnames, setBotsNames] = useState([]); if(savedStrats.length==0){ fetch('/auth/fetch_bots_names', {method: 'GET'}) .then(res => {return res.text()}).then(response => { try { let r = JSON.parse(response); setBotsNames(r['data']); } catch { console.log(response); } }); }y como señalé, el valor de botnames es una cadena como el ejemplo, pero lo necesito como una matriz (¿creo que una matriz JS?) para hacer un menú desplegable con los elementos de la lista, gracias de antemano
Puede usar jsonify para convertir sus datos en formato JSON y enviarlos como respuesta.
Puede usar argumentos de palabras clave o pasar un dict.
La documentación explica claramente el uso.
from flask import jsonify @bp.route('/fetch_bots_names', methods=['GET']) def fetch_bots_names(): bot_names = [bot.name for bot in Bot.query.all()] return jsonify({ 'ok': True, 'msg':'Success', 'data': bot_names })En React usas Fetch Api así.
fetch('/auth/fetch_bots_names') .then(resp => resp.json()) .then(data => { setBotsNames(data.data); });No he probado el código, pero debería funcionar.
Es posible que desee echar un vistazo a Flask-Marshmallow si desea enviar conjuntos de datos más grandes.
Aquí hay un ejemplo rápido usando Flask-Marshmallow en combinación con marshmallow-sqlalchemy.
from flask import Flask from flask import jsonify from flask_sqlalchemy import SQLAlchemy from flask_marshmallow import Marshmallow app = Flask(__name__) db = SQLAlchemy(app) ma = Marshmallow(app) class Bot(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String) class BotSchema(ma.SQLAlchemyAutoSchema): class Meta: model = Bot with app.app_context(): db.drop_all() db.create_all() bots = [Bot(name=f'bot-{i+1}') for i in range(5)] db.session.add_all(bots) db.session.commit() @app.route('/bots') def bots(): bots = Bot.query.all() bot_schema = BotSchema(many=True) bot_data = bot_schema.dump(bots) return jsonify(data=bot_data)El resultado de la consulta se ve así.
{ "data": [ { "id": 1, "name": "name-1" }, { "id": 2, "name": "name-2" }, { "id": 3, "name": "name-3" }, { "id": 4, "name": "name-4" } ] }