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

推荐阅读
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 理解浏览器历史记录(2)hashchange、pushState
    阅读目录1.hashchange2.pushState本文也是一篇基础文章。继上文之后,本打算去研究pushState,偶然在一些信息中发现了锚点变 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • Requests库的基本使用方法
    本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 近期尝试从www.hub.sciverse.com网站通过编程手段获取数据时遇到问题,起初尝试使用WebBrowser控件进行数据抓取,但发现使用GET方法翻页时,返回的HTML代码始终相同。进一步探究后了解到,该网站的数据是通过Ajax异步加载的,可通过HTTP查看详细的JSON响应。 ... [详细]
  • Markdown 编辑技巧详解
    本文介绍如何使用 Typora 编辑器高效编写 Markdown 文档,包括代码块的插入方法等实用技巧。Typora 官方网站:https://www.typora.io/ 学习资源:https://www.markdown.xyz/ ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • Jenkins API当前未直接提供获取任务构建队列长度的功能,因此需要通过解析HTML页面来间接实现这一需求。 ... [详细]
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • 高级缩放示例.就像谷歌地图一样.它仅缩放图块,但不缩放整个图像.因此,缩放的瓷砖占据了恒定的记忆,并且不会为大型缩放图像调整大小的图像.对于简化的缩放示例lookhere.在Win ... [详细]
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社区 版权所有