Отправить JSON массивов через POST в Python - PullRequest
0 голосов
/ 02 апреля 2020

Я вроде как нуб на python (только что узнал несколько кодов, смотря видео на Youtube)

Что я пытаюсь сделать:

  • У меня есть файл с именем депозиты. json с несколькими JSON, как показано ниже
[ {
         "locator":"TRANSACAO448",
         "storeCode":"loja01",
         "deviceCode":"teste01",
         "eventDate":"2020-04-01 09:30:53",
         "memberIdentification":"04153883506",
         "employeeIdentification":"",
         "offerCode":"4",
         "points":10,
         "purchaseValue":1,
         "additionalInformation":[
            {
               "key":"CODMOVPON",
               "value":"1"
            }
         ]
      },
      {
         "locator":"TRANSACAO448",
         "storeCode":"loja01",
         "deviceCode":"teste01",
         "eventDate":"2020-04-01 09:30:53",
         "memberIdentification":"04153883506",
         "employeeIdentification":"",
         "offerCode":"4",
         "points":10,
         "purchaseValue":1,
         "additionalInformation":[
            {
               "key":"CODMOVPON",
               "value":"1"
            }
         ]
}]
  • Есть нижеприведенный скрипт, который отправляет сообщение стажеру API
with open('deposits.json', 'r') as infile:

    # Variable for building our JSON block
    json_block = []

    for line in infile:

        # Add the line to our JSON block
        json_block.append(line)

        # Check whether we closed our JSON block
        if line.startswith('{'):

            # Do something with the JSON dictionary
            json_dict = json.loads(''.join(json_block))
            a = json_dict

            # Start a new block

#Request com os parametros para envio, como tipo e url de destino
r = requests.post(url, data=json.dumps(a) ,headers=headers,timeout=60)
print   "------------------------------------------------------------------------------------"
print  "Request:" 
print   json.dumps(a)
print   "Data_envio:"+data_envio_completa
print  (r)
print  (r.text)
print   "------------------------------------------------------------------------------------"
#salva o resultado em um txt com a data de envio no nome
with open (data_envio+'_log_transacoes.txt','wb') as l:
    l.write(json.dumps(a))
    l.write('Status: '+str(r.status_code))
    l.write(r.text.encode('utf-8'))
json_block = []

Проблема: Мне нужно отправлять один запрос за раз, как LOP, потому что этот API не принимает [{json}, {json}] только {json}, а код, который сейчас похож, только отправляет 1 запрос, не подсчитывает, сколько строк в файле JSON.

Кто-нибудь может мне помочь?

1 Ответ

2 голосов
/ 02 апреля 2020

Вы можете упростить свой код, используя пакет json в python

import json

with open('./deposits.json.json') as f:
    json_file = json.load(f)
    print(json_file)

, который позволит вам загрузить

[{'locator': 'TRANSACAO448', 'storeCode': 'loja01', 'deviceCode': 'teste01', 'eventDate': '2020-04-01 09:30:53', 'memberIdentification': '04153883506', 'employeeIdentification': '', 'offerCode': '4', 'points': 10, 'purchaseValue': 1, 'additionalInformation': [{'key': 'CODMOVPON', 'value': '1'}]}, {'locator': 'TRANSACAO448', 'storeCode': 'loja01', 'deviceCode': 'teste01', 'eventDate': '2020-04-01 09:30:53', 'memberIdentification': '04153883506', 'employeeIdentification': '', 'offerCode': '4', 'points': 10, 'purchaseValue': 1, 'additionalInformation': [{'key': 'CODMOVPON', 'value': '1'}]}]

в вашу переменную, которая является массивом jsons, затем вы могли бы l oop над ним, чтобы каждая {} строка отправлялась отдельно

for entry in json_file:

  r = requests.post(url, data=json.dumps(entry) ,headers=headers,timeout=60)

...