Foros del Web » Programando para Internet » PHP »

Json_encode() y los dos puntos

Estas en el tema de Json_encode() y los dos puntos en el foro de PHP en Foros del Web. Hola a todos. Tengo un problema y es que tengo una cadena que contiene el carácter dos puntos ":", ésta la guardo en un array, ...
  #1 (permalink)  
Antiguo 18/09/2014, 02:57
lamek
Invitado
 
Mensajes: n/a
Puntos:
Json_encode() y los dos puntos

Hola a todos.
Tengo un problema y es que tengo una cadena que contiene el carácter dos puntos ":", ésta la guardo en un array, y después este array le hago json_encode() para enviarlo. El problema está en que json encode no lo trata bien. Hay alguna forma de escape?

Ejemplo:
Código PHP:
$str "esto es una prueba: esto sigue siendo: una prueba"

$array = array(
     
"cadena" => json_encode($str)

Se os ocurre algo?
  #2 (permalink)  
Antiguo 18/09/2014, 03:25
 
Fecha de Ingreso: enero-2011
Ubicación: Barcelona
Mensajes: 36
Antigüedad: 13 años, 4 meses
Puntos: 5
Respuesta: Json_encode() y los dos puntos

Hola lamek,

No entiendo exactamente tu problema, pero he hecho pruebas de con las arrays y los json_encode / json_decode y no he tenido problemas para procesarlo.

Código PHP:
<?
$str 
"esto es una prueba: esto sigue siendo: una prueba";

$arr = array(
     
"cadena" => json_encode($str)
);

print_r($arr);echo "<br /><br />"//Array Normal

$arr=json_encode($arr);
echo 
$arr;echo "<br /><br />"//Array codificada

$arr=(array) json_decode($arr);
print_r($arr);echo "<br /><br />"//Array decodificada

echo json_decode($arr['cadena']);echo "<br /><br />"//Valor docodificado
echo $arr['cadena']; //Valor codificado
?>

<!--Respuesta-->

Array ( [cadena] => "esto es una prueba: esto sigue siendo: una prueba" )

{"cadena":"\"esto es una prueba: esto sigue siendo: una prueba\""}

Array ( [cadena] => "esto es una prueba: esto sigue siendo: una prueba" )

esto es una prueba: esto sigue siendo: una prueba

"esto es una prueba: esto sigue siendo: una prueba"
  #3 (permalink)  
Antiguo 18/09/2014, 07:25
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Json_encode() y los dos puntos

A mi también me funcionan perfectamente los dos puntos en una cadena, ¿no estarás borracho?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 18/09/2014, 07:48
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Json_encode() y los dos puntos

De echo es el comportamiento esperado.
Pero no sera que quieres algo como este ejemplo ?
Código PHP:
Ver original 
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 18/09/2014, 08:17
lamek
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Json_encode() y los dos puntos

Os explico mejor, es que hice pruebas y cuando quitaba los dos puntos no me tiraba error.
Tengo una cadena asi: "a:2:{s:7:\"colores\";a:6:{s:4:\"name\";s:7:.. ." De este tipo pero mas larga y lo que hago es, mediante GuzzleHttp, envio un POST en el que los argumentos del body tienen que estar en json.

Tengo algo asi:
Código PHP:
$metaStruct =  array(
            
"key" => "_nuevo_meta",
            
"value" => "AQUI METO EL string"
        
);

        
$argsAttributes =  array(
            
'body' => json_encode($metaStruct)
        ); 
Y esto lo envio por curl. Se que funciona porque cambiando la cadena y metiendo cualquier texto me lo ejecuta bien.


Se os ocurre de qué puede ser?
  #6 (permalink)  
Antiguo 18/09/2014, 08:44
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Json_encode() y los dos puntos

Me temo que no estas enviando la respuesta como esperas:
Código PHP:
Ver original
  1. $metaStruct =  array(
  2.             "key" => "_nuevo_meta",
  3.             "value" => "AQUI METO EL string"
  4.         );
  5.  
  6.         $argsAttributes =  array(
  7.             'body' => $metaStruct
  8.         );  
  9. var_dump(json_encode($argsAttributes));
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #7 (permalink)  
Antiguo 19/09/2014, 03:44
lamek
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Json_encode() y los dos puntos

Ese no es el problema, lo he estado usando como lo tengo y no da fallo.

El problema sigue siendo el value de metaStruct, y creo que es porque lo confunde con un array en vez de con un string al hacer el json_encode(). Es que ese string contiene llaves de apertura y de cierre, dos puntos, punto y coma... pero necesito que la cadena sea así.

Hay alguna manera de que el string se envie tal cual? Sólo texto...
  #8 (permalink)  
Antiguo 19/09/2014, 04:24
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Json_encode() y los dos puntos

Cita:
Iniciado por lamek Ver Mensaje
[...] y creo que es porque lo confunde con un array en vez de con un string al hacer el json_encode() [...]
Ese tampoco es el problema porque la estructura que tienes es una cadena de texto, producto de serialize() probablemente.

Al ser cadena json_encode() la guarda como cadena y así también la debería leer.

Observa el siguiente código:

Código PHP:
Ver original
  1. $y = new stdClass();
  2. $y->m = 'n';
  3.  
  4. $data = array('k' => $y, 'l', 1, 2, 3);
  5. $serialized = serialize($data);
  6. $json_encoded = json_encode(array('meta' => $serialized));
  7.  
  8. var_dump($json_encoded);
  9.  
  10. $decoded = json_decode($json_encoded);
  11. $decoded->meta = unserialize($decoded->meta);
  12.  
  13. var_dump($decoded);

Así que el problema no puede venir de algo tan simple como los dos puntos.

O al menos eso apuntan las pruebas ¿no será que estás omitiendo algo?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 19/09/2014, 05:38
lamek
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Json_encode() y los dos puntos

He comprobado varias veces si funciona el código que os he puesto, y si, funciona.

He hecho pruebas con el mismo código que os he escrito, pero en vez de escribir esa cadena, he escrito otro texto probando con puntos, llaves... y no me da problemas, pero meto esta cadena y me salta un error.

Estoy usando GuzzleHttp para enviar el post que, mediante API rest, recojo los datos y los guardo en la bd.

La cadena es de este tipo: "a:2:{s:7:\"colores\";a:6:{s:4:\"name\";s:7:" pero más larga... y quito las llaves y funciona, si pruebo quitando los dos puntos, también funciona... pero si los dejo me salta un error...
  #10 (permalink)  
Antiguo 19/09/2014, 09:34
lamek
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Json_encode() y los dos puntos

Ya se cual es el problema... Lo que ocurre es que envio una array Serializado y el api rest no lo acepta para el envío.

Gracias por las respuestas! Ahora tendré que tirar por otro lado para buscar la solución.

Etiquetas: puntos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:47.