Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema JSON-PHP-MySQL

Estas en el tema de Problema JSON-PHP-MySQL en el foro de PHP en Foros del Web. Hola a todos, vereis, estoy teniendo problemas para parsear el objeto JSON. Os explico: Mi aplicacion Android envia al web service un objeto JSON de ...
  #1 (permalink)  
Antiguo 24/07/2014, 07:39
 
Fecha de Ingreso: enero-2012
Mensajes: 32
Antigüedad: 12 años, 2 meses
Puntos: 1
Sonrisa Problema JSON-PHP-MySQL

Hola a todos, vereis, estoy teniendo problemas para parsear el objeto JSON. Os explico:
Mi aplicacion Android envia al web service un objeto JSON de este tipo

Código:
[
      {
           "id":  "1"
           "nombre":   "coche",
           "precio":   "11000",
       },

      {
          "id":   "23",
           "nombre":   "bici",
           "precio":   "100",
       }
]

Mi pagina.php tengo:
Código PHP:
    $json $_POST['json'];    
    
$data json_decode($jsontrue);
    echo 
$json;
       echo 
$data

El primero echo imprime algo tal que asi:
Código:
[
       {
            \"id\":\"1\",
            \"nombre\":\"coche\",
            \"precio\":\"11000\"
       },

      {
           \"id\":\"23\",
           \"nombre\":\"bici\",
           \"precio\":\"10\"
      }
]
El segundo echo no imprime nada.

Lo que quiero es insertar ese JSON en un tabla MySQL. Pero no consigo formar un array de string para utilizarlo en un bucle for y hacer un INSERT INTO. Algo tal que asi

Código:
$result = json_decode($json);
foreach($result as $key => $value) 
{
    if($value) 
   {
           mysql_query("INSERT INTO miTabla(value1,value2) 
                                  VALUES     ($value->json_filed1, $value->json_field2,)");    
     }
}
Gracias amigos por la yuda !!!
  #2 (permalink)  
Antiguo 24/07/2014, 07:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema JSON-PHP-MySQL

Más allá d elo que dices, tienes un error grave de sintaxis en la creación de la query:
Código MySQL:
Ver original
  1. INSERT INTO miTabla(value1,value2)
  2. VALUES     ($value->json_filed1, $value->json_field2,) -- <-- Hay una com a de más al final.
Estás intentando insertar dos campos, con dos valores del array, pero estás poniendo una coma de más en el VALUES.
Por otro lado, esa query sólo funcionará bien si el contenido de $value->json_filed1 y $value->json_field2 son números. Si contiene cadenas de caracters se producirá un error de columna desconocida.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 24/07/2014, 08:06
 
Fecha de Ingreso: enero-2012
Mensajes: 32
Antigüedad: 12 años, 2 meses
Puntos: 1
Respuesta: Problema JSON-PHP-MySQL

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Más allá d elo que dices, tienes un error grave de sintaxis en la creación de la query:
Código MySQL:
Ver original
  1. INSERT INTO miTabla(value1,value2)
  2. VALUES     ($value->json_filed1, $value->json_field2,) -- <-- Hay una com a de más al final.
Estás intentando insertar dos campos, con dos valores del array, pero estás poniendo una coma de más en el VALUES.
Por otro lado, esa query sólo funcionará bien si el contenido de $value->json_filed1 y $value->json_field2 son números. Si contiene cadenas de caracters se producirá un error de columna desconocida.
Si bueno ha sido un error escribiendo rápido.

En cuanto a lo segundo, no se si el formato del objeto JSON que recibe el PHP es el correcto o debo de "convertirlo" a otro tipo de dato. Como puedo crear un for(...) con un INSERT INTO dentro para insertar los strings del JSON en la base de datos?!?

No me viene nada a la cabeza
  #4 (permalink)  
Antiguo 24/07/2014, 08:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema JSON-PHP-MySQL

Según el manual de referencia de PHP, lo recibido tiene errores:
Código PHP:
Ver original
  1. [
  2.       {
  3.            "id":  "1"
  4.            "nombre":   "coche",
  5.            "precio":   "11000",  // coma de más
  6.        },
  7.  
  8.       {
  9.           "id":   "23",
  10.            "nombre":   "bici",
  11.            "precio":   "100", // coma de más
  12.        }
  13. ]

Ver en manual de referencia PHP: json_decode()


Cita:

Ejemplo #3 Errores comunes al usar json_decode()

Código PHP:
Ver original
  1. <?php
  2.  
  3. // los siguientes strings son válidos en JavaScript pero no en JSON
  4.  
  5. // el nombre y el valor deben estar entre comillas dobles
  6. // las comillas simples no son válidas
  7. $bad_json = "{ 'bar': 'baz' }";
  8. json_decode($bad_json); // null
  9.  
  10. // el nombre debe estar entre comillas dobles
  11. $bad_json = '{ bar: "baz" }';
  12. json_decode($bad_json); // null
  13.  
  14. // las comas finales no están permidas
  15. $bad_json = '{ bar: "baz", }';
  16. json_decode($bad_json); // null
  17.  
  18. ?>
Además, si la variable te imprime esto:
Código PHP:
Ver original
  1. [
  2.        {
  3.             \"id\":\"1\",
  4.            \"nombre\":\"coche\",
  5.            \"precio\":\"11000\"
  6.       },
  7.  
  8.      {
  9.           \"id\":\"23\",
  10.           \"nombre\":\"bici\",
  11.           \"precio\":\"10\"
  12.      }
  13. ]
Tengo la impresión de que estás escapando indebidamente algo. Esos "\" no deberían verse.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 24/07/2014, 08:35
 
Fecha de Ingreso: enero-2012
Mensajes: 32
Antigüedad: 12 años, 2 meses
Puntos: 1
Respuesta: Problema JSON-PHP-MySQL

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Según el manual de referencia de PHP, lo recibido tiene errores:
Código PHP:
Ver original
  1. [
  2.       {
  3.            "id":  "1"
  4.            "nombre":   "coche",
  5.            "precio":   "11000",  // coma de más
  6.        },
  7.  
  8.       {
  9.           "id":   "23",
  10.            "nombre":   "bici",
  11.            "precio":   "100", // coma de más
  12.        }
  13. ]

Ver en manual de referencia PHP: [URL="http://php.net//manual/es/function.json-decode.php"]json_decode()[/URL]




Además, si la variable te imprime esto:
Código PHP:
Ver original
  1. [
  2.        {
  3.             \"id\":\"1\",
  4.            \"nombre\":\"coche\",
  5.            \"precio\":\"11000\"
  6.       },
  7.  
  8.      {
  9.           \"id\":\"23\",
  10.           \"nombre\":\"bici\",
  11.           \"precio\":\"10\"
  12.      }
  13. ]
Tengo la impresión de que estás escapando indebidamente algo. Esos "\" no deberían verse.
Ups vaya. Se me ha colado el copy&paste varias veces. El primer JSON, esas comas de más no salen. Ha sido una errata mia.
En cuanto a los "\" no se porque salen en ese echo. Los puedo eliminar con:
Código:
$json = $_POST['json'];	
$json=stripslashes($json); 
$data = json_decode($json, true); #elimino las barras invertidas
echo $json; #imprime el JSON al igual que el primero, sin las contrabarras
echo $data; #imprime la palabra 'Array' ?!?!
  #6 (permalink)  
Antiguo 24/07/2014, 09:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema JSON-PHP-MySQL

Código PHP:
Ver original
  1. echo $json; #imprime el JSON al igual que el primero, sin las contrabarras
  2. echo $data; #imprime la palabra 'Array' ?!?!

Quitale los corchetes ([) que están al inicio y al final.
Probemos con eso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 24/07/2014, 09:22
 
Fecha de Ingreso: enero-2012
Mensajes: 32
Antigüedad: 12 años, 2 meses
Puntos: 1
Respuesta: Problema JSON-PHP-MySQL

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Código PHP:
Ver original
  1. echo $json; #imprime el JSON al igual que el primero, sin las contrabarras
  2. echo $data; #imprime la palabra 'Array' ?!?!

Quitale los corchetes ([) que están al inicio y al final.
Probemos con eso.
El JSON sin contrabarras ni brackets:
Código:
$json = $_POST['json'];	
$json=stripslashes($json); 
$json = str_replace("["," ",$json);
$json = str_replace("]","",$json);
$data = json_decode($json, true);
El echo de $data imprime:
Código:
{
           "id":  "1"
           "nombre":   "coche",
           "precio":   "11000"
       },
 
      {
          "id":   "23",
           "nombre":   "bici",
           "precio":   "100"
       }
Es correcto?!?
  #8 (permalink)  
Antiguo 24/07/2014, 10:26
 
Fecha de Ingreso: enero-2012
Mensajes: 32
Antigüedad: 12 años, 2 meses
Puntos: 1
Respuesta: Problema JSON-PHP-MySQL

He intentado hacer varias cosas...tales como esta:
Código:
$sql = "INSERT INTO myTabla(id,nombre,precio) VALUES ";	
$valores= array();
if(is_array($data))
{
    foreach($data as $row)
   {     	
	$id= mysql_real_escape_string( $row['id'] );
	$nom= mysql_real_escape_string( $row['nombre'] );
	$pre= mysql_real_escape_string( $row['precio'] ); 
        $valores[] = "('$id', '$nom', '$pre')";
   }

$sql .= implode(',', $valores);
}
mysql_query($sql) or exit(mysql_error());
Pero no hay manera
Alguna ayuda!?!?

Última edición por johncapi; 24/07/2014 a las 10:30 Razón: errores
  #9 (permalink)  
Antiguo 24/07/2014, 10:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema JSON-PHP-MySQL

Error mío: No saques los corchetes.
Mira este ejemplo, como para que lo entiendas:
Código PHP:
Ver original
  1. $json= '[{
  2.           "id":  "1",
  3.           "nombre":   "coche",
  4.           "precio":   "11000"
  5.       },
  6.  
  7.      {
  8.          "id":   "23",
  9.           "nombre":   "bici",
  10.           "precio":   "100"
  11.       }]';
  12.              
  13. $data = json_decode($json, true);
  14.  
  15. foreach ($data as $row) {
  16.     $sql = "INSERT INTO miTabla(value1, value2, value3)  VALUES(".$row["id"].", '".$row["nombre"]."', ".$row["precio"].")";
  17.      echo $sql."\n";
  18. }
El resultado sería:
Código SQL:
Ver original
  1. INSERT INTO miTabla(value1, value2, value3)  VALUES(1, 'coche', 11000)
  2. INSERT INTO miTabla(value1, value2, value3)  VALUES(23, 'bici', 100)

Obviamente ese "\n" que le pongo es sólo a los efectos de que la salida en pantalla no salga todo pegado.

Nota: Cuidado con las comas. Te olvidaste de una en el primer valor del primer array.


Consejo:
Haz las pruebas en un sandbox como este: http://sandbox.onlinephpfunctions.com/

Te ayudará a depurar los segmentos de código.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 24/07/2014, 12:39
 
Fecha de Ingreso: enero-2012
Mensajes: 32
Antigüedad: 12 años, 2 meses
Puntos: 1
Respuesta: Problema JSON-PHP-MySQL

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Error mío: No saques los corchetes.
Mira este ejemplo, como para que lo entiendas:
Código PHP:
Ver original
  1. $json= '[{
  2.           "id":  "1",
  3.           "nombre":   "coche",
  4.           "precio":   "11000"
  5.       },
  6.  
  7.      {
  8.          "id":   "23",
  9.           "nombre":   "bici",
  10.           "precio":   "100"
  11.       }]';
  12.              
  13. $data = json_decode($json, true);
  14.  
  15. foreach ($data as $row) {
  16.     $sql = "INSERT INTO miTabla(value1, value2, value3)  VALUES(".$row["id"].", '".$row["nombre"]."', ".$row["precio"].")";
  17.      echo $sql."\n";
  18. }
El resultado sería:
Código SQL:
Ver original
  1. INSERT INTO miTabla(value1, value2, value3)  VALUES(1, 'coche', 11000)
  2. INSERT INTO miTabla(value1, value2, value3)  VALUES(23, 'bici', 100)

Obviamente ese "\n" que le pongo es sólo a los efectos de que la salida en pantalla no salga todo pegado.

Nota: Cuidado con las comas. Te olvidaste de una en el primer valor del primer array.


Consejo:
Haz las pruebas en un sandbox como este: [url]http://sandbox.onlinephpfunctions.com/[/url]

Te ayudará a depurar los segmentos de código.
Vaaaaaaleee !!!
Ahora comprendo. Estaba enfocando mal el for-each. Ademas de que mi JSON no terminaba en ;
Es de gran ayuda tu comentario!! +1 !!

Etiquetas: mysql, tabla
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 08:51.