Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python GeopPoint类型的对象不可JSON序列化_Python_Firebase_Flask_Firebase Realtime Database_Flash Message - Fatal编程技术网

Python GeopPoint类型的对象不可JSON序列化

Python GeopPoint类型的对象不可JSON序列化,python,firebase,flask,firebase-realtime-database,flash-message,Python,Firebase,Flask,Firebase Realtime Database,Flash Message,我想创建一个API,该API必须从firestore恢复数据并在json中公开数据,但我面临以下错误: Object of type GeoPoint is not JSON serializable 怎么了?这是我的代码: #!/usr/bin/env python import firebase_admin import json from pprint import pprint as pp from flask import Flask, flash, request, url_for

我想创建一个API,该API必须从firestore恢复数据并在json中公开数据,但我面临以下错误:

Object of type GeoPoint is not JSON serializable
怎么了?这是我的代码:

#!/usr/bin/env python
import firebase_admin
import json
from pprint import pprint as pp
from flask import Flask, flash, request, url_for, jsonify, Response
from firebase_admin import credentials
from firebase_admin import firestore

app = Flask(__name__)

cred = credentials.Certificate('xxxx.json')
firebase_admin.initialize_app(cred)
db = firestore.client()

@app.route('/')
def index():

    markers_ref = db.collection(u'Test')
    docs = markers_ref.get()

    data = []
    for doc in docs:
        data.append(doc.to_dict())

    json_data = json.dumps(data)
    resp = Response(json_data, status=200, mimetype='application/json')

    return resp

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

下面的方法应该可以奏效-

from flask import (Flask, request, session, g, redirect, url_for, abort, render_template, flash, Response, jsonify)
import firebase_admin
from firebase_admin import firestore

@app.route('/foods/<id>')
def read_food(id):

    result=FOODS.document(id).get().to_dict()
    record = {}
    # Populate the new dict with JSON serializiable values
    for key in result:
        if isinstance(result[key], firebase_admin.firestore.GeoPoint):
            record[key] =str(result[key].latitude)+','+str(result[key].longitude)
            continue
        record[key] = result[key]

    # Add the key so that we have a reference to the record
    record['key'] = result[key]

    return jsonify(record)
来自flask导入的
(flask、请求、会话、g、重定向、url、中止、呈现模板、flash、响应、jsonify)
导入firebase_管理员
从firebase_管理员导入firestore
@应用程序路径(“/foods/”)
def读取食物(id):
结果=FOODS.document(id).get().to_dict()
记录={}
#用JSON可序列化值填充新dict
对于输入结果:
如果isinstance(结果[键],firebase_admin.firestore.GeoPoint):
记录[key]=str(结果[key]。纬度)+','+str(结果[key]。经度)
持续
记录[键]=结果[键]
#添加键以便我们有一个对记录的引用
记录['key']=结果[key]
返回jsonify(记录)
上面说“GeoPoint类型的对象(例如:数据列表)不能作为JSON文本”,所以请尝试从一些文本/字符串数据中获取JSON。也许你还有一步要做?(例如,将地质点类型解析/转换为对象类型)。