PHP - problema con json_decode

 
Vista:

problema con json_decode

Publicado por mateo (2 intervenciones) el 19/02/2019 17:17:36
Buenos dias para todos,

Tengo un archivo json que necesito decodificar para manipularlo en php, el problema es que algunos datos o palabras contienen acentos y cuando intento hacer el json_decode($json) retorna null.

La solución que he podido encontrar aunque no creo que se la correcta para esta situación es emplear un preg_replace() que básicamente elimina estos caracteres y luego hacer el json_decode().

Estoy desesperado con el tema y quisiera que alguno de esta comunidad me ayudara.

Este es el contenido del json, se supone que debería estar en un archivo dentro del programa(para entendimiento del código)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
    "usuarios": [
        {
            "id_personaFamiliar": 20237,
            "correo": "prueba@prueba.org.co",
            "password": "prueba",
            "nombres_apellidos": "DARIO ORTIZ LOPERA",
            "operacion": "insert"
        }
    ],
    "familiares": [
        {
            "id_persona": 38841,
            "fecha_nacimiento": null,
            "ubicacion": "GALERÍA SAN MARCOS 34 (OCCIDENTE) - CÓDIGO 34 2002",
            "id_personaFamiliar": 20237,
            "nombres_apellidos": "MARIA LOPERA ORTIZ",
            "operacion": "insert"
        }
    ]
}

Así funciona eliminando las tildes:

1
2
3
$data = file_get_contents($path);
$json = json_decode(preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $data), true);
print_r ($json);

Lo que pretendo es que pueda tener el mismo json con tildes y acentos.

Agradezco su pronta ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con json_decode

Publicado por Alejandro (838 intervenciones) el 20/02/2019 00:27:48
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
Según la documentación "Esta función sólo trabaja con string codificados en UTF-8."
Así pues revisa la codificación de tu archivo o utiliza utf8_encode();


He probado tu código y me funciona, el archivo es UTF-8 y el código lo deje así
1
$json = json_decode($data, true);

Para el archivo codificado en ANSI lo he echo asi
1
$json = json_decode(utf8_encode($data), true);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

problema con json_decode

Publicado por Mateo (2 intervenciones) el 20/02/2019 03:32:57
Buenas noches Alejandro,

He intentado hacer lo que indicas pero aun así no me funciona.

Algo nuevo que probé fue seteando el json a una variable de php y realizo el json_decode() y funciona sin problema.
creo que el error esta en:

1
$data = file_get_contents($path);

Aunque cuando imprimo el contenido de $data sale exactamente igual, al archivo json.

Podrías probar extrayendo el json de un archivo con algo así :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$path = "ruta_archivo_json";
if (file_exists($path)) {
 
    //Como usted me sugirio
    $data = file_get_contents($path);
    $memoriaviva = json_decode(utf8_encode($data), true);
 
    print_r($data);
    print_r($memoriaviva);
 
    //Asi funciona sin tildes
    //$memoriaviva = json_decode(preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $data), true);
 
}else{
    echo "no existe el archivo";
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar