热门标签 | 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]}}'

推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文基于刘洪波老师的《英文词根词缀精讲》,深入探讨了多个重要词根词缀的起源及其相关词汇,帮助读者更好地理解和记忆英语单词。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了 GWT 中 PopupPanel 类的 onKeyDownPreview 方法,提供了多个代码示例及应用场景,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • Java 类成员初始化顺序与数组创建
    本文探讨了Java中类成员的初始化顺序、静态引入、可变参数以及finalize方法的应用。通过具体的代码示例,详细解释了这些概念及其在实际编程中的使用。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
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社区 版权所有