Cesar Cotiz
Cesar Cotiz

Reputation: 59

I'm trying to parse a JSON correctly with Python/Django

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

Answers (2)

edilio
edilio

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

holdenweb
holdenweb

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

Related Questions