【问题标题】:How to format out put as Json in flask get request如何在烧瓶获取请求中将输出格式化为 Json
【发布时间】:2019-09-21 23:52:04
【问题描述】:

我对烧瓶很陌生, 基本上我有这个返回多个值的代码

length= len(data['hits']['hits'])


for i in range(length):
  #print(i)
  #print (data['hits']['hits'][i]['_source']['message'])
  imei=((data['hits']['hits'][i]['_source']['GPS-LOG'].get("IMEI")))
  print ("imei: {}".format(imei))
  log_time=((data['hits']['hits'][i]['_source']['@timestamp']))
  print ("log time: {}".format(log_time))

输出:-

imei: 44444
log time: 2019-09-21T23:31:28.429Z
imei: 55555
log time: 2019-09-21T23:32:02.554Z
imei: 22222
log time: 2019-09-21T23:32:04.561Z
imei: 555555
log time: 2019-09-21T23:32:14.591Z

我在烧瓶 GET 方法中使用该脚本

@app.route('/battery/<string:get_imei>')
def get_battery(get_imei):
 length= len(data['hits']['hits'])
    for i in range(length):

    imei=(data['hits']['hits'][i]['_source']['GPS-LOG'].get("IMEI"))
    #print ("imei: {}".format(imei))
    log_time=((data['hits']['hits'][i]['_source']['@timestamp']))
    d = datetime.datetime.strptime(log_time,"%Y-%m-%dT%H:%M:%S.%fZ")
    new_format = "%Y-%m-%d"
    d.strftime(new_format)
    print ("log time: {}".format(d))
    return jsonify ('{} {}'.format(imei, d))

但这不返回多个值,它也只返回单个值我不能让它像{'imei':'22222','logtime':'2019-09-21'},... .

【问题讨论】:

    标签: python-3.x flask flask-restful


    【解决方案1】:

    只需将 return jsonify ('{} {}'.format(imei, d)) 替换为

    return jsonify(imei = imei, logtime = d)
    

    应该会得到预期的结果。

    【讨论】:

    • 感谢@Nadim Abrar,这已转换为 json 但仍不显示多个值,它只显示最后一个值。
    【解决方案2】:

    您可以使用 JSON 数组来实现。首先,您需要通过迭代值列表并将 dict 附加到列表中来将每一对添加到 dict 中。在此之后 jsonify 列表以获取所有值。 从您的代码块看来,只有第一个值会被返回,因为 jsonify 只会在单个值上返回 JSON 格式,无论是列表还是任何其他字典。

        #say you have two lists of imei and corresponding logtime
        imei=[44444,55555,22222,55555]
        logtime=['2019-09-21T23:31:28.429Z','2019-09-21T23:32:02.554Z','2019-09-21T23:32:04.561Z','2019-09-21T23:32:14.591Z']
    
        #to add each entry in JSON format in an array containing two fields, you need to create a temp dict and append it in list
        result=[]
    
        # we need to iterate over each element and add it to the dict and then add the dict to list
        for i in range(len(imei)):
            # it is creating a temporary dict and appending it to the result list (array)
            tempDict={'imei':imei[i],'logtime':logtime[i]}
            result.append(tempDict)
    
        # after this return the result as JSON    
        return jsonify(result=result)
    

    您的输出将如下所示

    {"result":[{"imei":44444,"logtime":"2019-09-21T23:31:28.429Z"},{"imei":55555,"logtime":"2019-09-21T23:32:02.554Z"},{"imei":22222,"logtime":"2019-09-21T23:32:04.561Z"},{"imei":55555,"logtime":"2019-09-21T23:32:14.591Z"}]}
    

    这里有类似的帖子:Flask-Json How do i return mutiple rows as json objects

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-24
      • 2014-07-23
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 2016-04-21
      • 1970-01-01
      相关资源
      最近更新 更多