Reputation: 59
I'm trying to consume some data from a JSON
with requests, but I consistently receive a Parsing error when I try to validate.
I try this code, transforming from dict
to string
, and later to JSON
.
import requests
import json
r = requests.get('http://codehere.com', auth=('user', 'pass')).json()
json.loads(json.dumps(r))
print(r)
Before:
{
"result": [
"[
{
\"IDE_NOMBRE\":\"DUMMY\",
\"IDE_CODIGO\":1,
\"TER_IDENTIFICACION\":\"DUMMY\",
\"TER_CIUEXPCED\":\"\",
\"TER_DEPEXPCED_NOM\":\"\",
\"TER_CIUEXPCED_NOM\":\"\",
\"TER_FCHEXPCED\":null,
\"TER_SEXO\":\"M\",
\"TER_APELLIDO1\":\"DUMMY\",
\"TER_APELLIDO2\":\"DUMMY\u00D1O\",
\"TER_NOMBRE\":\"DUMMY\",
\"TER_NOMBRE1\":\"\",
\"TER_CUINACI\":\"\",
\"TER_DEPNACI_NOM\":\"\",
\"TER_CUINACI_NOM\":\"\",
\"TER_FCHNACI\":null,
\"TER_NROHIJOS\":0,
\"ESTCIV_NOMBRE\":\"\",
\"ESTCIV_CODIGO\":\"\",
\"NIVESC_CODIGO\":\"\",
\"NIVESC_NOMBRE\":\"\",
\"TER_BARRIO\":\"\",
\"CIU_CODIGO\":\"05001\",
\"CIU_DEPTO\":\"DUMMY\",
\"CIU_NOMBRE\":\"DUMMY\",
\"TER_TELEFONO\":\"\",
\"TER_EMAIL\":\"\",
\"TER_DIRECCION\":\"\",
\"TER_TELMOVIL\":\"\",
\"TER_PERSONASCARGO\":0,
\"TIPVIV_DESCRIPCION\":\"\",
\"CLI_ESTRATO\":\"\",
\"CLI_FCHAFILIACION\":\"2018-10-01 00:00:00\",
\"CLI_CODISS\":\"\",
\"ACT_CODIGO\":\"1\",
\"ASESOR_WEB\":0,
\"COD_CIIU\":\"\",
\"TIPTRIB_CCN\":0,
\"TIPTRIB_NOMBRE\":\"\",
\"SECO_CODIGO\":\"\",
\"SECO_NOMBRE\":\"\",
\"BAN_CODIGO\":\"DUMMY\",
\"BAN_NOMBRE\":\"DUMMY\",
\"TER_TPOCNTA\":\"1\",
\"TER_CUENTA\":\"DUMMY\",
\"TER_TIPONATU\":\"N\",
\"JORLAB_CODIGO\":\"\",
\"JORLAB_NOMBRE\":\"\",
\"OCU_CODIGO\":\"\",
\"OCU_NOMBRE\":\"\",
\"TPS_CCN\":\"1\",
\"TPS_DESCRIPCION\":\"NORMAL\",
\"OBSERVACIONES\":\"\",
\"TER_TOTING\":0,
\"TER_TOTEGRE\":0,
\"TER_TOTACTIV\":0,
\"TER_TOTPASIV\":0,
\"TER_TOTPATRIM\":0,
\"TER_TOTCOST\":0,
\"CLI_MUJCABFAM\":\"\",
\"AFECTA_VIVIENDA\":\"\",
\"TER_ENVIOCORRESP\":\"\",
\"COENT_CCN\":0,
\"COENT_NOMBRE\":\"\",
\"CLI_SALARIO\":0,
\"CLI_OTRSEGRE\":0,
\"CTR_CODIGO\":\"3\",
\"CTR_NOMBRE\":\"DUMMY\",
\"CLI_ULFCHLIQU\":null,
\"PRO_CODTER\":0,
\"PRO_NOMBRE\":\"\",
\"PRO_NOMBRE_1\":\"DUMMY\",
\"PRO_CODIGO\":7,
\"TER_OTRING\":0,
\"TER_CONOTRING\":\"\",
\"TER_RELPERPEP\":\"\",
\"TIPVIV_CCN\":0,
\"CAR_NOMBRE\":\"\",
\"NOM_CONY1\":\"\",
\"NOM_CONY2\":\"\",
\"APE_CONY1\":\"\",
\"APE_CONY2\":\"\",
\"DEP_CODDILI\":\"\",
\"CIU_CODDILI\":\"\",
\"TER_FCHDILI\":null,
\"EMP_CODIGO\":\"E2\",
\"EMP_NOMBRE\":\"DUMMY\",
\"TER_EMPLAB\":\"\",
\"TER_RELLAB\":\"\",
\"CIU_EMPLAB\":\"\",
\"CIU_NOMBRE_1\":\"DUMMY\",
\"TER_DIREMPLAB\":\"\",
\"TER_TELEMPLAB\":\"\",
\"TER_CELEMPLAB\":\"\",
\"TER_SUELDO\":0,
\"TER_FCHINEMPLAB\":null,
\"TER_FCHTERCONT\":null,
\"TER_TIPCONTRA\":\"\",
\"CTR_NOMBRE_1\":\"\",
\"NRO_TARVISIO\":\"\",
\"NRO_TARVISIO1\":\"\",
\"PAI_PK\":0,
\"PAI_NAC\":170,
\"PAIS_CODIGO\":\"\",
\"TER_AUTTRATDATOS\":\"\",
\"TER_CCNASESOR\":0,
\"CIIU_CODIGO_2\":\"\",
\"CIIU_NOMBRE\":\"\",
\"SECO_CODIGO_2\":\"\",
\"SECO_NOMBRE_1\":\"\",
\"TER_TOTEXCED\":0,
\"TER_DIGITOVERIF\":\"\",
\"VALORCOND\":0,
\"TEL_CONY\":\"\",
\"EMAIL_CONY\":\"\",
\"NIVEL_EST_CONY\":\"\",
\"ACTIVIDAD_CONY\":\"\",
\"TER_SINANLUCR\":\"\",
\"TER_SIGLA\":\"\",
\"TIENSAL_CCODIGO\":0,
\"TER_SOCIO_S_N\":\"S\",
\"TER_TELEFONOLAB\":\"\",
\"CIU_CODIGOLAB\":\"\",
\"TER_DIRECCIONLAB\":\"\",
\"COD_CIIU_1\":\"\",
\"CIIU_NOMBRE_1\":\"\",
\"TER_TOTCOSTOP\":0,
\"ESTRATO_CONY\":\"\",
\"TER_RAZONSOCIAL\":\"\",
\"CLI_FCHINGRESOCIA\":null,
\"TER_NOMCOMPLETO\":\"DUMMY DUMMY\u00D1O DUMMY\"
}
]"
]
}
Results:
{'result': ['[
{
"IDE_NOMBRE": "",
"IDE_CODIGO": 1,
"TER_IDENTIFICACION": "",
"TER_CIUEXPCED": "",
"TER_DEPEXPCED_NOM": "",
"TER_CIUEXPCED_NOM": "",
"TER_FCHEXPCED": null,
"TER_SEXO": "M",
"TER_APELLIDO1": "",
"TER_APELLIDO2": "",
"TER_NOMBRE": "",
"TER_NOMBRE1": "",
"TER_CUINACI": "",
"TER_DEPNACI_NOM": "",
"TER_CUINACI_NOM": "",
"TER_FCHNACI": null,
"TER_NROHIJOS": 0,
"ESTCIV_NOMBRE": "",
"ESTCIV_CODIGO": "",
"NIVESC_CODIGO": "",
"NIVESC_NOMBRE": "",
"TER_BARRIO": "",
"CIU_CODIGO": "",
"CIU_DEPTO": "",
"CIU_NOMBRE": "",
"TER_TELEFONO": "",
"TER_EMAIL": "",
"TER_DIRECCION": "",
"TER_TELMOVIL": "",
"TER_PERSONASCARGO": 0,
"TIPVIV_DESCRIPCION": "",
"CLI_ESTRATO": "",
"CLI_FCHAFILIACION": "",
"CLI_CODISS": "",
"ACT_CODIGO": "",
"ASESOR_WEB": 0,
"COD_CIIU": "",
"TIPTRIB_CCN": 0,
"TIPTRIB_NOMBRE": "",
"SECO_CODIGO": "",
"SECO_NOMBRE": "",
"BAN_CODIGO": "",
"BAN_NOMBRE": "",
"TER_TPOCNTA": "1",
"TER_CUENTA": "",
"TER_TIPONATU": "N",
"JORLAB_CODIGO": "",
"JORLAB_NOMBRE": "",
"OCU_CODIGO": "",
"OCU_NOMBRE": "",
"TPS_CCN": "1",
"TPS_DESCRIPCION": "",
"OBSERVACIONES": "",
"TER_TOTING": 0,
"TER_TOTEGRE": 0,
"TER_TOTACTIV": 0,
"TER_TOTPASIV": 0,
"TER_TOTPATRIM": 0,
"TER_TOTCOST": 0,
"CLI_MUJCABFAM": "",
"AFECTA_VIVIENDA": "",
"TER_ENVIOCORRESP": "",
"COENT_CCN": 0,
"COENT_NOMBRE": "",
"CLI_SALARIO": 0,
"CLI_OTRSEGRE": 0,
"CTR_CODIGO": "",
"CTR_NOMBRE": "",
"CLI_ULFCHLIQU": null,
"PRO_CODTER": 0,
"PRO_NOMBRE": "",
"PRO_NOMBRE_1": "",
"PRO_CODIGO": 7,
"TER_OTRING": 0,
"TER_CONOTRING": "",
"TER_RELPERPEP": "",
"TIPVIV_CCN": 0,
"CAR_NOMBRE": "",
"NOM_CONY1": "",
"NOM_CONY2": "",
"APE_CONY1": "",
"APE_CONY2": "",
"DEP_CODDILI": "",
"CIU_CODDILI": "",
"TER_FCHDILI": null,
"EMP_CODIGO": "",
"EMP_NOMBRE": "",
"TER_EMPLAB": "",
"TER_RELLAB": "",
"CIU_EMPLAB": "",
"CIU_NOMBRE_1": "",
"TER_DIREMPLAB": "",
"TER_TELEMPLAB": "",
"TER_CELEMPLAB": "",
"TER_SUELDO": 0,
"TER_FCHINEMPLAB": null,
"TER_FCHTERCONT": null,
"TER_TIPCONTRA": "",
"CTR_NOMBRE_1": "",
"NRO_TARVISIO": "",
"NRO_TARVISIO1": "",
"PAI_PK": 0,
"PAI_NAC": 170,
"PAIS_CODIGO": "",
"TER_AUTTRATDATOS": "",
"TER_CCNASESOR": 0,
"CIIU_CODIGO_2": "",
"CIIU_NOMBRE": "",
"SECO_CODIGO_2": "",
"SECO_NOMBRE_1": "",
"TER_TOTEXCED": 0,
"TER_DIGITOVERIF": "",
"VALORCOND": 0,
"TEL_CONY": "",
"EMAIL_CONY": "",
"NIVEL_EST_CONY": "",
"ACTIVIDAD_CONY": "",
"TER_SINANLUCR": "",
"TER_SIGLA": "",
"TIENSAL_CCODIGO": 0,
"TER_SOCIO_S_N": "S",
"TER_TELEFONOLAB": "",
"CIU_CODIGOLAB": "",
"TER_DIRECCIONLAB": "",
"COD_CIIU_1": "",
"CIIU_NOMBRE_1": "",
"TER_TOTCOSTOP": 0,
"ESTRATO_CONY": "",
"TER_RAZONSOCIAL": "",
"CLI_FCHINGRESOCIA": null,
"TER_NOMCOMPLETO": ""
}
]'
]
}
Expected: A valid JSON. I don't know if there are more steps, I'm trying to use that code on Django. Its shows only a complete string.
Upvotes: 0
Views: 68
Reputation: 1868
For sure .json()
will do the job correctly if the server is really sending a json
response. But it seems Results
inside is really a json
too.
So what you could do, if you are not the one developing the server side is:
import requests
import json
response = requests.get('http://codehere.com', auth=('user', 'pass'), content_type='application/json')
if response.status_code == 200:
resp = response.json()
if 'result' in resp:
result = json.loads(resp['result'])
else:
print('Something is wrong with result')
print(resp)
else:
print(response.status_code)
print(response.content)
So now you can handle result
as you please.
Upvotes: 3
Reputation: 37003
Both printouts show slightly different representations of the same value.
This value is a dictionary with a single key, 'result'
, whose value
appears to be a string containing the representation of a Python list containing a single dictionary. Appearances, however, can be deceptive.
This would seem to suggest that the server is behaving in what we might call a suboptimal way. If you have any control over it that would be the logical place to fix this situation.
The content is, in essence, so badly mangled by multiple rounds of string and/or JSON encoding that I'm not sure it's possible to easily fix this client-side.
Upvotes: 0