php - mostrar - leer archivo json local
escribiendo el objeto JSON en el archivo.json en el servidor (4)
Estoy intentando escribir mi objeto JSON en un archivo .json en el servidor. La forma en que estoy haciendo esto ahora es:
JavaScript:
function createJsonFile() {
var jsonObject = {
"metros" : [],
"routes" : []
};
// write cities to JSON Object
for ( var index = 0; index < graph.getVerticies().length; index++) {
jsonObject.metros[index] = JSON.stringify(graph.getVertex(index).getData());
}
// write routes to JSON Object
for ( var index = 0; index < graph.getEdges().length; index++) {
jsonObject.routes[index] = JSON.stringify(graph.getEdge(index));
}
// some jQuery to write to file
$.ajax({
type : "POST",
url : "json.php",
dataType : ''json'',
data : {
json : jsonObject
}
});
};
PHP:
<?php
$json = $_POST[''json''];
$info = json_encode($json);
$file = fopen(''new_map_data.json'',''w+'');
fwrite($file, $info);
fclose($file);
?>
Está escribiendo bien y la información parece ser correcta, pero no se está procesando correctamente. Está saliendo como:
{"metros":["{///"code///":///"SCL///",///"name///":///"Santiago///",///"country///":///"CL///",///"continent///":///"South America///",///"timezone///":-4,///"coordinates///":{///"S///":33,///"W///":71},///"population///":6000000,///"region///":1}",
... pero estoy esperando esto:
"metros" : [
{
"code" : "SCL" ,
"name" : "Santiago" ,
"country" : "CL" ,
"continent" : "South America" ,
"timezone" : -4 ,
"coordinates" : {"S" : 33, "W" : 71} ,
"population" : 6000000 ,
"region" : 1
} ,
¿Alguna idea de por qué estoy recibiendo todas estas barras y por qué todo está en una línea?
Gracias, Hristo
No JSON.stringify
. Obtienes una codificación JSON doble haciendo eso.
Primero convierta sus elementos de matriz en una cadena JSON, luego los agrega a su objeto completo y luego codifica su objeto grande, pero cuando codifica los elementos ya codificados se tratan como cadenas simples para que todos los caracteres especiales se escapen. Necesitas tener un objeto grande y codificarlo solo una vez. El codificador se ocupará de los niños.
Para el problema de la fila en fila intente enviar un encabezado de tipo de datos JSON: tipo de Content-type: text/json
, creo (no google para él). Pero la representación dependerá solo de su navegador. También es posible codificar con indentación.
Usted está codificando dos veces. No es necesario codificar en JS y PHP, solo hazlo en un lado, y solo hazlo una vez.
// step 1: build data structure
var data = {
metros: graph.getVerticies(),
routes: graph.getEdges()
}
// step 2: convert data structure to JSON
$.ajax({
type : "POST",
url : "json.php",
data : {
json : JSON.stringify(data)
}
});
Tenga en cuenta que el parámetro dataType
denota el tipo de respuesta esperada, no el tipo al que envía los datos. Las solicitudes de envío se enviarán como application/x-www-form-urlencoded
por defecto.
No creo que necesites ese parámetro en absoluto. Usted podría recortar eso a:
$.post("json.php", {json : JSON.stringify(data)});
Luego (en PHP) hacer:
<?php
$json = $_POST[''json''];
/* sanity check */
if (json_decode($json) != null)
{
$file = fopen(''new_map_data.json'',''w+'');
fwrite($file, $json);
fclose($file);
}
else
{
// user has posted invalid JSON, handle the error
}
?>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.3.min.js" ></script>
</head>
<body>
<?php
$str = file_get_contents(''data.json'');//get contents of your json file and store it in a string
$arr = json_decode($str, true);//decode it
$arrne[''name''] = "sadaadad";
$arrne[''password''] = "sadaadad";
$arrne[''nickname''] = "sadaadad";
array_push( $arr[''employees''], $arrne);//push contents to ur decoded array i.e $arr
$str = json_encode($arr);
//now send evrything to ur data.json file using folowing code
if (json_decode($str) != null)
{
$file = fopen(''data.json'',''w'');
fwrite($file, $str);
fclose($file);
}
else
{
// invalid JSON, handle the error
}
?>
<form method=>
</body>
data.json
{
"employees":[
{
"email":"11BD1A05G9",
"password":"INTRODUCTION TO ANALYTICS",
"nickname":4
},
{
"email":"Betty",
"password":"Layers",
"nickname":4
},
{
"email":"Carl",
"password":"Louis",
"nickname":4
},
{
"name":"sadaadad",
"password":"sadaadad",
"nickname":"sadaadad"
},
{
"name":"sadaadad",
"password":"sadaadad",
"nickname":"sadaadad"
},
{
"name":"sadaadad",
"password":"sadaadad",
"nickname":"sadaadad"
}
]
}
Probablemente es demasiado tarde para responder la pregunta. Pero me encontré con el mismo problema. Lo resolví usando "JSON_PRETTY_PRINT"
Lo siguiente es mi código:
<?php
if(isset($_POST[''object''])) {
$json = json_encode($_POST[''object''],JSON_PRETTY_PRINT);
$fp = fopen(''results.json'', ''w'');
fwrite($fp, $json);
fclose($fp);
} else {
echo "Object Not Received";
}
?>