How to read a Json file

4
$(document).ready(function(){
var json = [{
    bloco:"bloco1",
    titulo: "titulo1",
    perguntas: [{
        pergunta1: "Resposta1",
        opcaoSelecionada: "2"
            }];
}/*,{
    bloco:"bloco2",
    titulo: "titulo2",
    perguntas: [{
        pergunta2: "Resposta2",
        opcaoSelecionada: "2"
            }];*/
];    
//var obj = jQuery.parseJSON(json);

    alert(JSON.stringify(json));
    //alert(obj.bloco);
});

I'm learning Json, and would like to know if this structure is built correctly. The idea is to store all information within a% of objects%, which will be generated from data filled in the front.

Then I'll send this information via Ajax to PHP to mount a structure to display the data. Could you also tell me how I would read this file in PHP / javascript with a loop?

    
asked by anonymous 26.07.2015 / 19:41

3 answers

0

The JSON notation is quite similar to that of an object in Javascript, except for a few differences:

Javascript Object:

[
    {
       "bloco":"bloco1",    // Uso de aspas duplas 
       'titulo': "titulo1", // aspas simples é
       perguntas: [{        // opcional
          pergunta1: "Resposta1",
          opcaoSelecionada: 2 // Valores numéricos são permitido
       }], // Não se usa ; no final de um elemento nem para separar-los
       callback: function(){ alert('Hello World!'); }
    }
]

An object notation in Javascript is very flexible and simple. You can still add other elements after the object is created:

objeto[ 'chave' ] = 'Valor';
objeto[ 'outra' ] = {name: 'Objeto Filho', value: 'Outro valor' };

JSON:

[
    {
       "bloco":"bloco1",    // Uso de aspas duplas é obrigatório
       "titulo": "titulo1", // aspas simples não é permitido
       "perguntas": [{
          "pergunta1": "Resposta1",
          "opcaoSelecionada": 2 // Valores numéricos são permitido
       }] // Não se usa ; no final de um elemento nem para separar-los
       // Não é permitido funções
    }
]

You can send your data as an object by $.ajax , and receive it as form fields in PHP

var dados = [
  {
    bloco: "bloco1", titulo: "titulo1", perguntas: [
      {pergunta: "Pergunta1", opcao: 2},
      {pergunta: "Pergunta2", opcao: 1},
      {pergunta: "Pergunta3", opcao: 4}
    ]
  }
]

$.ajax({
  url: '/path/to/file',
  type: 'POST',
  dataType: 'json',
  data: {blocos: dados},
  success: function(data){
    alert(data.msg);
  }, 
  error: console.log
});

In PHP you can receive data as POST variables, as reported in the type property of ajax :

$blocos = (!empty($_POST['blocos']) ? $_POST['blocos'] : NULL);

$msg = '';

foreach ($blocos as $bloco) {
    $msg .= "Bloco: $bloco['bloco'] <br>\n".
            "Título: $bloco['titulo'] <br>\n";

    foreach ($bloco['perguntas'] as $pergunta) {
        $msg .= "Pergunta: $pergunta['pergunta'] <br>\n".
                "Resposta: $pergunta['opcao'] <br>\n";
    }

    $msg .= "<br>\n<br>\n";

}

header('Content-Type: application/json');
echo json_encode(
    Array( 
        'msg' => $msg 
    )
);
exit;

You can also send the data as a string and decode it as the json_decode function:

$.ajax({
  url: '/path/to/file',
  type: 'POST',
  dataType: 'json',
  data: {blocos: JSON.stringify(dados)},
  success: function(data){
    alert(data.msg);
  }, 
  error: console.log
});

When you send the object directly to the parameter data of $.ajax , jQuery will handle this data correctly. But when you transform the object into a string in JSON format using JSON.stringify(dados) it is necessary to decode this string in PHP:

<?php

    $blocos = (!empty($_POST['blocos']) ? json_decode($_POST['blocos']) : NULL);
    
28.07.2015 / 19:13
2

PHP has a function called json_decode

$matriz = array();
$matriz = json_decode($json);

which passes json to an array. I've never tried it but it should work, in case if json is well built but if you experiment with the function that I told you and everything, with the code below you can check how the structure is and see if you like it.

echo "<pre>"; 
print_r($matriz);
echo "</pre>";
    
26.07.2015 / 22:09
0

To read a JSON file with JavaScript you can use the jQuery.getJSON function:

$.getJSON( "caminho_do_arquivo/arquivo.json", function( data ) {
    // processe os dados aqui
});

The complete documentation for the jQuery.getJSON method can be found at link

    
28.07.2015 / 18:50