Usando requests
para postar o JSON em um serviço da web. Digitar o JSON assim funciona:
response = requests.post("https://ws.foo.net/search",
json=({
"filters": [
{
"filters": [
{
"field": "type",
"type": "EQ",
"value": "THING"
}
]
},
{
"filters": [
{
"field": "responseCode",
"type": "EQ",
"value": "301"
},
{
"field": "responseCode",
"type": "EQ",
"value": "302"
}
]
},
{
"filters": [
{
"field": "State",
"type": "EQ",
"value": "CONFIRMED"
}
]
}
]
}), auth=("name", "password"))
Eu quero usar variáveis no JSON construindo isso a partir de um dicionário usando json.dumps
.
Abaixo produz um erro 400:
Não foi possível ler JSON: não é possível instanciar o valor do tipo [tipo simples, classcom.linkco.ws.v1.model.V1SearchQuery] de JSON String; nenhum construtor de cadeia única / método de fábrica
import json
import requests
jsonObject = {"filters": [{"filters": [{"field": "type","type": "EQ","value": "WEB_SITE"}]},{"filters": [{"field": "name","type": "EQ","value": "something"}]},{"filters": [{"field": "State","type": "EQ","value": "CONFIRMED"}]}]}
response = requests.post("https://ws.foo.net/search", json=json.dumps(jsonObject), auth=("name", "password"))
print json.dumps(jsonObject)
print "----"
print response.text
Eu estou imprimindo json.dumps(jsonObject)
para verificar e produz JSON válido e funciona se copiado para um cliente REST que eu estou usando - é bom (bem - provavelmente não é por uma razão que eu não consegui encontrar).
Respostas:
1 para resposta № 1Um pequeno bug está causando o problema
response = requests.post("https://ws.foo.net/search",
json=jsonObject # was json.dumps(jsonObject),
auth=("name", "password"))
Isso deve funcionar bem
Veja, o pacote de requisição irá converter o python dict para Json (não você;))