Skip to content

Instantly share code, notes, and snippets.

@marcosfreitas
Created December 4, 2015 17:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save marcosfreitas/5c925e39d177865035d1 to your computer and use it in GitHub Desktop.
Save marcosfreitas/5c925e39d177865035d1 to your computer and use it in GitHub Desktop.
Utilizando o JSON PARSER (https://github.com/kuma-giyomu/JSONParser) para retornar parte de um grande arquivo JSON.
<?php
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
//header('Content-Type: application/json; charset=utf-8');
header('Content-Type: text/html; charset=utf-8');
ini_set("memory_limit","128M");
set_time_limit(120);
ob_start();
// link público do arquivo json
//https://drive.google.com/file/d/0B4mgTK9wetCqNVg2Y203TVhQQms/view?usp=sharing
$file = dirname(__FILE__).'/grade.json';
// salto é o número de objetos que devem ser pulados iniciando um novo intervalo de 10 objetos
if (isset($_GET['salto'])) {
$salto = (int) $_GET['salto'];
} else {
$salto = 0;
}
$array_json = array();
$aux_grupo_objetos = array();
$aux_prop_objeto = array();
$propriedade = "";
$valor = "";
$contador_itens = 0;
$contador_salto = 0;
$para_processo = false;
// para começar de 0 a 9, 10 a 20, etc.
if ($salto === 0 || $salto === 10) {
$inicio_salto = 0;
$fim_salto = 9;
} else {
$inicio_salto = ($salto-10);
$fim_salto = $salto;
}
echo "<br><strong>".$inicio_salto." - ".$fim_salto."</strong><br>";
/* Parse do arquivo JSON */
require_once dirname(__FILE__) . '/JSONParser/package/JSONParser.php';
/**
* CRIAR UM ARRAY DE OBJETOS E A CADA NOVO OBJETO INSTANCIAR UM ARRAY PASSANDO O ANTIGO PARA
* UMA VARIAVEL AUXILIAR QUE ACUMULARÁ TODOS OS ARRAYS QUE REPRESENTAM OS OBJETOS
* COLOCAR ESSA VARIAVEL DENTRO DE OUTRO ARRAY E TRANSFORMAR COM JSON_ENCODE NO FINAL *
*/
function objStart($value, $property) {
if ($GLOBALS['contador_salto'] >= $GLOBALS['inicio_salto'] && $GLOBALS['contador_salto'] <= $GLOBALS['fim_salto']){
echo "<br><br><strong>OBJETO ". $GLOBALS['contador_salto'] ."</strong><br><br>";
echo "<br><strong>salto: ".$GLOBALS['contador_salto']."</strong><br>";
$GLOBALS['contador_salto']++;
}
$GLOBALS['contador_itens']++;
}
function objEnd($value, $property) {
// só chega aqui depois do incremento em objStart()
if ($GLOBALS['contador_salto'] > $GLOBALS['fim_salto']){
echo $GLOBALS['contador_salto']." ---";
ob_flush();
ob_clean();
exit();
}
}
function arrayStart($value, $property) {
echo "<h1>início de tudo</h1>";
}
function arrayEnd($value, $property) {
echo "<h1>fim de tudo</h1>";
}
function property($value, $property) {
if ($GLOBALS['contador_salto'] >= $GLOBALS['inicio_salto'] && $GLOBALS['contador_salto'] <= $GLOBALS['fim_salto']){
echo "propriedade: ".$value."<br>";
}
}
function scalar($value, $property) {
if ($GLOBALS['contador_salto'] >= $GLOBALS['inicio_salto'] && $GLOBALS['contador_salto'] <= $GLOBALS['fim_salto']){
echo "valor: ".utf8_encode($value)."<br>";
}
}
// initialise the parser object
$parser = new JSONParser();
// sets the callbacks
$parser->setArrayHandlers('arrayStart', 'arrayEnd');
$parser->setObjectHandlers('objStart', 'objEnd');
$parser->setPropertyHandler('property');
$parser->setScalarHandler('scalar');
// parse the document
$parser->parseDocument($file);
$parser->initialise();
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment