热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

TypeError:“位置”类型的对象不可JSON序列化文本地址点坐标原始命题响应文本地址+点坐标

我正在为我的Flask网络应用程序使用geopy库。我想将我从模态(html

我正在为我的flask网络应用程序使用 geopy 库。我想将我从模态(html表单)获取的用户位置保存在数据库中(我正在使用mongodb),但是每次我都遇到此错误:
TypeError:“ Location”类型的对象不可JSON序列化

代码如下:

@app.route('/register',methods=['GET','POST'])
def register_user():
if request.method == 'POST':
login_user = mongo.db.mylogin
existing_user = login_user.find_one({'email': request.form['email']})
# final_location = geolocator.geocode(session['address'].encode('utf-8'))
if existing_user is None:
hashpass = bcrypt.hashpw(
request.form['pass'].encode('utf-8'),bcrypt.gensalt())
login_user.insert({'name': request.form['username'],'email': request.form['email'],'password': hashpass,'address': request.form['add'],'location' : session['location'] })
session['password'] = request.form['pass']
session['username'] = request.form['username']
session['address'] = request.form['add']
session['location'] = geolocator.geocode(session['address'])
flash(f"You are Registerd as {session['username']}")
return redirect(url_for('home'))
flash('username is taken !')
return redirect(url_for('home'))
return render_template('index.html')

请帮助,如果您需要更多信息,请告诉我。


根据geolocator documentation地理代码函数“按地址返回位置点” geopy.location.Location对象。

默认情况下,Json序列化支持以下类型:


  

Python | JSON

  
  

dict |对象

  
  

列表,元组|数组

  
  

str,unicode |字符串

  
  

int,长整型|数字

  
  

是|是

  
  

错误|错误

  
  

无|空

所有其他对象/类型默认情况下均未进行json序列化,因此您需要对其进行定义。


  

geopy.location.Location.raw

  
  

位置的原始,未解析的地址解析器响应。有关此的详细信息,
  请查阅服务文档。

  
  

返回类型:dict或None

您也许可以调用Location的原始函数(geolocator.geocode返回值),并且该值可以json序列化。

,

Location的确不是json可序列化的:此对象中有许多属性,并且没有表示位置的单一方法,因此您必须自己选择一个。

您希望在响应的location键中看到哪种类型的值?

以下是一些示例:

文本地址

In [9]: json.dumps({'location': geolocator.geocode("175 5th Avenue NYC").address})
Out[9]: '{"location": "Flatiron Building,175,5th Avenue,Flatiron District,Manhattan Community Board 5,Manhattan,New York County,New York,10010,United States of America"}'

点坐标

In [10]: json.dumps({'location': list(geolocator.geocode("175 5th Avenue NYC").point)})
Out[10]: '{"location": [40.7410861,-73.9896298241625,0.0]}'

原始命题响应

(假设您想保留将来将地理编码服务更改为另一种(可能具有不同的raw响应模式的能力),这不是您要在API中公开的内容。

In [11]: json.dumps({'location': geolocator.geocode("175 5th Avenue NYC").raw})
Out[11]: '{"location": {"place_id": 138642704,"licence": "Data \\u00a9 OpenStreetMap contributors,ODbL 1.0. https://osm.org/copyright","osm_type": "way","osm_id": 264768896,"boundingbox": ["40.7407597","40.7413004","-73.9898715","-73.9895014"],"lat": "40.7410861","lon": "-73.9896298241625","display_name": "Flatiron Building,United States of America","class": "tourism","type": "attraction","importance": 0.74059885426854,"icon": "https://nominatim.openstreetmap.org/images/mapicons/poi_point_of_interest.p.20.png"}}'

文本地址+点坐标

In [12]: location = geolocator.geocode("175 5th Avenue NYC")
...: json.dumps({'location': {
...: 'address': location.address,...: 'point': list(location.point),...: }})
Out[12]: '{"location": {"address": "Flatiron Building,"point": [40.7410861,0.0]}}'

推荐阅读
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 在编写业务代码时,常常会遇到复杂的业务逻辑导致代码冗长混乱的情况。为了解决这个问题,可以利用中间件模式来简化代码逻辑。中间件模式可以帮助我们更好地设计架构和代码,提高代码质量。本文介绍了中间件模式的基本概念和用法。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
  • 本文由编程笔记小编整理,主要介绍了使用Junit和黄瓜进行自动化测试中步骤缺失的问题。文章首先介绍了使用cucumber和Junit创建Runner类的代码,然后详细说明了黄瓜功能中的步骤和Steps类的实现。本文对于需要使用Junit和黄瓜进行自动化测试的开发者具有一定的参考价值。摘要长度:187字。 ... [详细]
  • JavaWeb中读取文件资源的路径问题及解决方法
    在JavaWeb开发中,读取文件资源的路径是一个常见的问题。本文介绍了使用绝对路径和相对路径两种方法来解决这个问题,并给出了相应的代码示例。同时,还讨论了使用绝对路径的优缺点,以及如何正确使用相对路径来读取文件。通过本文的学习,读者可以掌握在JavaWeb中正确找到和读取文件资源的方法。 ... [详细]
  • MongoDB的upsert在并行程序中应该注意的问题
    题图Oct.12th,2018最近使用python的多进程编程来解决一个MongoDB的数据库。这个程序中,每一个进程都要对数据库中的某些数据进行升级。假如目标数据不存在的话,则需 ... [详细]
  • django rest framework(一)django连接mongo配制方法
    原创文章转载请标明出处环境配置使用mongoengine操作数据库pipinstalldjangopipinstalldjangorestframeworkpipinstallmo ... [详细]
author-avatar
大Joob
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有