entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

JSON mal generado de mi base de datos

Hola. Les comento: Tengo un aplicación que la conecto a una base de datos local, (para hacer pruebas, antes de ponerlo en una externa). La cuestión es que me conecta bien, y me genera el JSON. Pero el JSON al parecer está mal generado, pues me general lo siguiente:

 ["1","xxxxxxx","Oasis","WonderWall","http:\/\/i58.tinypic.com\/143niuf.png","Concierto de Oasis, 12 de septiembre, Madrid, Palacio deportes de la Comunidad, 21:00 h, entradas desde 40 euros en ServiCaixa.","40.4167754","3.7037901999999576"]["2","xxxxxx","TAke-That","Love-Love","http:\/\/i60.tinypic.com\/2upwykh.png","Concierto de Take-That, 23 de Junio, Barcelona, Teatro Real, 22:00 h, entradas desde 50 euros en Fnac.","41.3850639","2.1734034999999494"]

Eso es la string que obtengo al hacer httpGetData, pero al hacer `ja=new JSONArray(data);, solo me coge el primer array, lo cual es normal.Lo correcto sería [{.........},{.........}]. De esta forma obtendría un array con los dos objetos, y podria obtener cada objeto.
No se si es problema de estar mal creada la base de datos, o del cotejamiento o no se.............
Dejo los dos archivos PHP para la conexión:

function.php

    <?php 
header( 'Content-Type: text/html;charset=utf-8' );

function getSQLResultSet($commando){

  $mysqli = new mysqli("localhost", "root", "", "basedatos");

  /* check connection */
  if ($mysqli->connect_errno) {
      printf("Connect failed: %s\n", $mysqli->connect_error);
      exit();
  }
  if ( $mysqli->multi_query($commando)) {
    return $mysqli->store_result();   
  }
  $mysqli->close();
  }

?>

consultarUsuario.php

    <?php
include('functions.php'); 
if ($resultset = getSQLResultSet("SELECT * from britis")) {

        while ($row = $resultset->fetch_array(MYSQLI_NUM)) {
        echo json_encode($row);

        }

   }

?>

Por último, validando con JSONLint, me da esto:

 Parse error on line 10:
....7037901999999576"][    "2",    "http
----------------------^
Expecting 'EOF', '}', ',', ']'

1 Respuesta

3votos

jonatancastro1 Puntos3110

Prueba hacerlo asi:

if ($resultset = getSQLResultSet("SELECT * from britis")) {
        $resultados = array();
        while ($row = $resultset->fetch_array(MYSQLI_NUM)) {
              array_push($resultados, $row);
        }
        echo json_encode($resultados);
}

0voto

nachito777sk comentado

Muchas gracias jonatan. Poniendo eso me sale lo siguiente:

[["1","xxxxxxx","Oasis","WonderWall","http:\/\/i58.tinypic.com\/143niuf.png","Concierto de Oasis, 12 de septiembre, Madrid, Palacio deportes de la Comunidad, 21:00 h, entradas desde 40 euros en ServiCaixa.","40.4167754","3.7037901999999576"],["2","xxxxxxxxxxx","TAke-That","Love-Love","http:\/\/i60.tinypic.com\/2upwykh.png","Concierto de Take-That, 23 de Junio, Barcelona, Teatro Real, 22:00 h, entradas desde 50 euros en Fnac.","41.3850639","2.1734034999999494"]]

Ahora tengo un array que contiene dos arrays. No era exactamente lo que quería, pero creo que con esto me puedo apañar.
Gracias de nuevo.

0voto

Peter comentado

@nachito777sk movi tu respuesta a comentarios, porque no es una respuesta a tu pregunta :)

0voto

nachito777sk comentado

Buenas. Tenía una duda más, y es que hasta ahora no había visto nada de JSON, estoy empezando ahora, (en el CFGS Aplicaciones Multiplataforma no dimos nada de JSON), y al final he hecho otro PHP que me hace lo que yo quería, un array que contiene los objetos. Pero me hace algo raro que no se si es normal. Os enseño el JSON que me genera:

[{"0":"1","id":"1","1":"aa","name":"aa","2":"aaaa","title":"aaaa"},{"0":"2","id":"2","1":"bb","name":"bb","2":"bbbb","title":"bbbb"}]

Cada campo me lo genera dos veces. El primer campo:
0=1 es el mismo que id=1, y el segundo campo 1=aa es el mismo que name=aa.
Por que genera esto???

Graciassssssssss y Saludosssssss

0voto

Peter comentado

@nachito777sk volvi a mover tu respuesta a comentario porque no es una respuesta a la pregunta inicial. Si la pregunta principal esta solucionada, por favor marca la respuesta como correcta. para nuevas preguntas y dudas, por favor crea una pregunta nueva.

Saludos.

0voto

jonatancastro1 comentado

Si no estoy mal esto es debido a la función fetch_array de mysqli, esta recibe una constante que representa la forma en que quieres que se representen los campos en el array, las formas posibles son:

fetch_array(MYSQLI_NUM); //arreglo numérico ej: $row[1];
fetch_array(MYSQLI_ASSOC); //arreglo asociativo ej: $row['campo'];
fetch_array(MYSQLI_BOTH); //ambos ej: $row[1], $row['campo'];

Creo que por defecto lo hace con MYSQLI_BOTH, por lo que por cada campo del registro genera dos indices en el arreglo, numérico y asociativo. prueba usar las 3 opciones y mira el array que retorna a ver si es por eso.

Saludos.

0voto

nachito777sk comentado

Ahora perfecto.

[{"id":"1","name":"aa","title":"aaaa"},{"id":"2","name":"bb","title":"bbbb"}]

era con (MYSQLIASSOC). Mchísimas gracias jonatan. Eres un máquina. ;)

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta