代码之家  ›  专栏  ›  技术社区  ›  Nitikesh Dubey

如何将输出转换为json格式?

  •  1
  • Nitikesh Dubey  · 技术社区  · 6 年前

    代码:::

    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和瓶子框架非常陌生 当用户在浏览器上输入url时,例如“localhost:8080/loc?postcode=4700”,它将返回与该邮政编码相关的数据,但为csv格式,但我希望以json格式获得输出,以便我可以使用此数据在地图上查找地址 有人能帮我得到结果吗

    示例:运行瓶式localhost框架后,我希望在浏览器上的输出为:

    enter image description here

    已更新 但我得到的是: enter image description here

    2 回复  |  直到 6 年前
        1
  •  2
  •   mustachioed    6 年前

    像这样将表转换为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攻击。

        2
  •  1
  •   eatmeimadanish    6 年前

    所以有两件事,您应该使用json。转储为输出。瓶子总是会从输出中逃逸出来,以确保安全。要绕过此问题,应加载一个调用变量的模板。然后在模板内部访问变量,如下所示: {{!variable\u name}}}

    !! 如果数据与用户输入相关,这是非常危险的,因为它们可以很容易地将可运行代码插入到您的页面中。小心使用!!