【问题标题】:How to get the output into a json format?如何将输出转换为 json 格式?
【发布时间】:2018-02-22 03:51:36
【问题描述】:

代码:::

from bottle import route, request, response, template,run
import petl as etl
@route('/loc')
def abc():
    response.headers['Access-Control-Allow-Origin']='*'
    response.headers['Content-type']='application/json'
    post = request.query.postcode
    locationTable = etl.fromcsv('clinic_locations.csv')
    abcd = etl.search(locationTable, 'Postcode', post)
    return template('{{postcode}}',postcode=abcd)

这是csv 文件,我想以 json 格式获取结果,但我不知道该怎么做,因为我对 petl 和 bottle 框架非常陌生 当用户在浏览器上输入网址时,例如“localhost:8080/loc?postcode=4700”,它将返回有关该邮政编码的数据,但以 csv 格式返回,但我想以 json 格式获取输出,以便我可以使用这些数据在地图上找到地址 谁能帮我得到结果

示例:通过瓶子框架运行 localhost 后,我​​希望在浏览器上的输出是:

更新 但我得到的是:

【问题讨论】:

  • 你能分享一下你的输出现在是什么样子吗?
  • 只是让您知道,缩进在 Python 中很重要。
  • 是的,我知道我想得到 json 格式的输出,你能帮帮我吗
  • @NitikeshDubey etl 模块是什么?请给minimal, complete, and verifiable 答复。
  • 更新了问题!!

标签: python json bottle


【解决方案1】:

像这样将表格转换为 JSON,它需要您使用 json 模块。这是通过查看petl 模块源代码创建的。

from bottle import route, request, response, template,run
import petl as etl
import json
@route('/loc')
def abc():
    response.headers['Access-Control-Allow-Origin']='*'
    response.headers['Content-type']='application/json'
    post = request.query.postcode
    locationTable = etl.fromcsv('clinic_locations.csv')
    abcd = etl.search(locationTable, 'Postcode', post)
    abcd = json.JSONEncoder().encode(list(etl.dicts(abcd))) #Here's where the magic happens.
    return abcd

如果您最终使用此答案,请确保您的数据库已过滤掉所有 <script> 标记,否则恶意用户可能会将 JavaScript 插入您的数据库,并使您的 API 端点运行任意 JavaScript,即所谓的 XSS 攻击。

【讨论】:

  • 非常感谢,但浏览器显示了这个----[{“ID”:“25”,“姓名”:“Booie Clinic”,“郊区”:“Booie” ;,“州”:“QLD”,“邮政编码”:“4610”,“电子邮件”:“mailto:booie@myclinic.com.au”,“Lat”:“-26.498426” ;, "Lon": "151.935421"}]
  • @NitikeshDubey 您只需要返回 abcd 而不是模板。模板函数将转义返回。我会编辑我的答案来解决这个问题。
  • 为什么显示的不是 ("") 这些引用
  • @NitikeshDubey " 是 HTML 中 " 的转义序列。 Bottle 正确地逃避了这一点,以防止 XSS 与 JSON 一起发生。确保您的数据库已过滤掉所有 <script> 标签,否则恶意用户可能会将 javascript 插入您的数据库并让您的 api 端点运行任意 js。如果有帮助,请点击答案旁边的“检查”。
  • 您对 XSS 的看法是正确的。我的代码中没有考虑到这一点。 输入过滤器 @MustacheMoses
【解决方案2】:

所以有两件事,你应该使用 json.dumps 作为你的输出。并且瓶子将始终逃避输出以使其安全。要绕过这个,您应该加载一个调用变量的模板。然后在模板中,像这样访问变量: {{!variable_name}}

!!如果数据与用户输入相关,这是非常危险的,因为他们可以轻松地将可运行代码插入到您的页面中。慎用!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2018-06-20
    • 2020-08-30
    • 2022-07-05
    • 2019-12-16
    相关资源
    最近更新 更多