2016-09-10 3 views
2

Там есть запрос POST, который прекрасно работает, когда я передать данные, как показано ниже:Python: Json свалки побег цитата

url = 'https://www.nnnow.com/api/product/details' 

requests.post(url, data="{\"styleId\":\"BMHSUR2HTS\"}", headers=headers) 

Но когда я использую json.dumps() на словарь и отправить ответ, я не получаю ответ (код ответа 504), используя headers={'Content-Type': 'application/json'}. Также попробовал json-параметр Post-запросов.

requests.post(url, data=json.dumps({"styleId":"BMHSUR2HTS"}), headers={'content-type': 'application/json'}) 

Теперь, возвращаемые данные по json.dumps({"styleId":"BMHSUR2HTS"}) и "{\"styleId\":\"BMHSUR2HTS\"}" не то же самое.

json.dumps({"styleId":"BMHSUR2HTS"}) == "{\"styleId\":\"BMHSUR2HTS\"}" дает False, хотя печать на обоих показывает аналогичную строку.

Как я могу получить такой же формат, как "{\"styleId\":\"BMHSUR2HTS\"}" из словаря {"styleId":"BMHSUR2HTS"}?

+0

Единственная разница между вашей строкой и результатом 'json.dumps' заключается в том, что последнее будет содержать пробел после двоеточия; что не является существенным в JSON и не является причиной вашей проблемы. –

+0

Что происходит, когда вы просто передаете фактический 'dict'? Например, 'request.post (url, data = {" styleId ":" BMHSUR2HTS "}, заголовки = заголовки)'. Это форма использования в примере [request docs] (http://docs.python-requests.org/en/master/user/quickstart). –

+0

Вы можете получить тот же результат, используя 'json.dumps ({" styleId ":" BMHSUR2HTS "}, separators = (',', ':'))', но я не понимаю, почему он не может работать из-за этого – odrling

ответ

1

Если вы печатаете json.dumps({"styleId":"BMHSUR2HTS"}), вы заметите две вещи:

  1. ваш вывод является строкой (попробуйте type(json.dumps({"styleId":"BMHSUR2HTS"})));
  2. Если вы обратите внимание, на выходе будет добавлено пространство между именем json и значением: {"styleId": "BMHSURT2HTS"}.

Не знаю, как вы хотите, чтобы справиться с этим, и в коде входа, но есть 2 основных варианта, чтобы обойти эту проблему:

  1. Replace пространство на выходе json.dumps: json.dumps({"styleId":"BMHSUR2HTS"}).replace(': ', ':')
  2. Преобразовать все JSON с помощью Eval(): eval(json.dumps({"styleId":"BMHSUR2HTS"})) и eval(YOUR_JSON_STRING)

Я надеюсь, что это поможет вам.

Смежные вопросы