0

Hola gente espero que estén teniendo un lindo día.

Bueno mi problema es el siguiente llevo un rato tratando de convertir una matriz a un objeto json para poder tratarlo en otra app.

he intentado usan el tipico json_encode() con el array dentro pero cuando hago el tipico echo json_encode($miMatriz) no me imprime nada, hice un var_dump() para revisar que mi matriz tuviera algo y si tiene información, ¿alguno sabe que puedo hacer ahí?

while($registroVariable=mysqli_fetch_assoc($resultadoVariables)){
    $matrix['variable'.$countVariables] = $registroVariable;

    $consulta = "SELECT * FROM pregunta WHERE idVariable = '".$registroVariable['idVariable']."' and idPreguntasHermanas = 0 ORDER BY RAND() LIMIT ".$numTotalSolas;

    $resultadoPreguntas = mysqli_query($conexion,$consulta)
    $countPreguntas = 0;

    while($registroPregunta = mysqli_fetch_assoc($resultadoPreguntas)){
        $matrix['variable'.$countVariables]['pregunta'.$countPreguntas] = $registroPregunta;

        $consulta = "SELECT * FROM respuesta WHERE idPregunta = '".$registroPregunta['idPregunta']."' LIMIT ".$registroPregunta['minRespuestas'];

        $countRespuestas = 0;
        $resultadoRespuestas = mysqli_query($conexion,$consulta);

        while($registroRespuestas = mysqli_fetch_assoc($resultadoRespuestas)){

            $matrix['variable'.$countVariables]['pregunta'.$countPreguntas]['respuesta'.$countRespuestas] = $registroRespuestas;
            $countRespuestas++;
        }

        $countPreguntas++;
    }

    $consulta = "SELECT DISTINCT * FROM pregunta WHERE idVariable = '".$matrix['variable'.$countVariables]['idVariable']."' and idPreguntasHermanas != 0 ORDER BY RAND() LIMIT ".$numHermanas;

    $resultadoPreguntas = mysqli_query($conexion,$consulta);

    while($registroPregunta = mysqli_fetch_assoc($resultadoPreguntas)){

        $matrix['variable'.$countVariables]['pregunta'.$countPreguntas] = $registroPregunta;

        $consulta = "SELECT * FROM respuesta WHERE idPregunta = '".$registroPregunta['idPregunta']."' LIMIT ".$registroPregunta['minRespuestas'];
        $countRespuestas = 0;
        $resultadoRespuestas = mysqli_query($conexion,$consulta);

        while($registroRespuestas = mysqli_fetch_assoc($resultadoRespuestas)){

            $matrix['variable'.$countVariables]['pregunta'.$countPreguntas]['respuesta'.$countRespuestas] = $registroRespuestas;
            $countRespuestas++;
        }

        $countPreguntas++;

        $consulta = "SELECT DISTINCT * FROM pregunta WHERE idVariable = '".$matrix['variable'.$countVariables]['idVariable']."' and idPreguntasHermanas = ".$registroPregunta['idPreguntasHermanas']." ORDER BY RAND() LIMIT ".$numRepetir;

        $resultadoPreguntasHermanas = mysqli_query($conexion,$consulta);

        while($registroPreguntaHermanas = mysqli_fetch_array($resultadoPreguntasHermanas)){

            $matrix['variable'.$countVariables]['pregunta'.$countPreguntas] = $registroPreguntaHermanas;

            $consulta = "SELECT * FROM respuesta WHERE idPregunta = '".$registroPreguntaHermanas['idPregunta']."' LIMIT ".$registroPreguntaHermanas['minRespuestas'];
            $countRespuestas = 0;
            $resultadoRespuestas = mysqli_query($conexion,$consulta);

            while($registroRespuestas = mysqli_fetch_assoc($resultadoRespuestas)){

                $matrix['variable'.$countVariables]['pregunta'.$countPreguntas]['respuesta'.$countRespuestas] = $registroRespuestas;
                $countRespuestas++;
            }

            $countPreguntas++;
        }
    }

    $countVariables++;

}
utf8_encode($matrix);
echo json_encode($matrix);
var_dump($matrix);

que recomendación me dan en este caso?

Juan Salvador Portugal
  • 6,565
  • 8
  • 19
  • 41
  • Saludos podrias agregar un ejemplo de la matriz que posees y deseas convertir para poder ayudarte mejor..!! – Diego Avila Apr 10 '19 at 16:05
  • Hola mira ya que la matriz es bastante grande la subi a pastebin para que puedas verla mejor te dejo el link https://pastebin.com/hFAdnjCg – Andres Camilo Rincon Caballero Apr 10 '19 at 16:15
  • mejor pon en pastebin lo que te saca ` var_export($miMatriz);` asi podremos probar mas facilmente. – Fly Apr 10 '19 at 16:34
  • hola mira ya puse lo que me sale de var_export($miMatriz) https://pastebin.com/Sh3mqWJG – Andres Camilo Rincon Caballero Apr 10 '19 at 16:37
  • La conversión con `json_encode()` de los datos que nos pasaste es correcta: http://sandbox.onlinephpfunctions.com/code/fb0d3308efd9cf4e680c99fd4669d19bb3c26560 ( y verificado en https://jsonlint.com/). `utf8_encode($matrix)` no hace nada pues debes pasarle un `string` no una `array`, mejor quitalo. Activa la visualización de errores a ver si sale algo – Fly Apr 10 '19 at 17:13
  • Veo caracteres extraños en tus datos, puede que si no tienes bien configurado el juego de caracteres de la conexión el JSON quede fastidiado por cualquiera de esos caracteres. En esos casos aplicar `utf8_encode` no sirve para nada, tienes que aplicar el juego de caracteres al objeto de la conexión, o a la configuración de PHP, o a los datos mismos si es que están mal guardados en la BD ([ya esto fue tratado aquí](https://es.stackoverflow.com/a/59510/29967)). Prueba de entrada esto, antes de ejecutar cualquier consulta: `mysqli_set_charset($conexion, "utf8");` – A. Cedano Apr 10 '19 at 18:29

1 Answers1

0

Saludos puedes intentar de la siguiente manera:

$datos = [
    ["nombre" => "pepe", "edad" => 25, "peso" => 80],
    ["nombre" => "juan", "edad" => 22, "peso" => 75]
];
$json = json_encode($datos, JSON_FORCE_OBJECT);
var_dump($json);

el resultado seria:

string(85) "{"0":{"nombre":"pepe","edad":25,"peso":80},"1":{"nombre":"juan","edad":22,"peso":75}}" 

Espero te sirva y suerte..!!

Diego Avila
  • 5,306
  • 2
  • 16
  • 40