Как отформатировать поставить как Json в колбу получить запрос - PullRequest
0 голосов
/ 22 сентября 2019

Я довольно новичок в колбе, в основном у меня есть этот код, который возвращает несколько значений

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))

, но это не возвращает нескольких значений, его единственное возвращаемое единственное значение также может ли я не сделать его в формате json, например {'imei': '22222', 'logtime': '2019-09-21'}, ....

Ответы [ 2 ]

0 голосов
/ 22 сентября 2019

Вы можете сделать это, используя массив 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"}]}

enter image description here

Вот аналогичная тема: Flask-JsonКак вернуть несколько строк в виде объектов json

0 голосов
/ 22 сентября 2019

Просто замена return jsonify ('{} {}'.format(imei, d)) на

return jsonify(imei = imei, logtime = d)

должна получить ожидаемый результат.

...