JSON:所有值都转换为字符串

时间:2013-04-26 19:53:25

标签: php json angularjs

我使用Angular($ http.post)和PHP将json文件保存到服务器。保存的json文件将所有值转换/保存为字符串,包括数字和布尔值。当json文件稍后被读入时,这显然会导致问题。

PHP代码:

header('Content-Type: application/json;charset=utf-8');

$fh = fopen('savedfiles/'.$_POST['fileName'], 'w') or die("can't open file");

if(fwrite($fh, json_encode($_POST['fileData']))===FALSE){
    echo "FAILED";
}
else {

    echo "SUCCESS";
}

fclose($fh);

Angular / $ http代码:

var deferred = $q.defer();
var savePromise = $http.post('save.php',{fileName:file_name,fileData:data}).
then(function(response){
  deferred.resolve(response.data);
},function(response){ 
  deferred.resolve("FAILED");
});
return deferred.promise;

感谢您提出的所有建议!

更新:Here is the output of saved JSON file

更新:Here is the data before being sent to the PHP file

3 个答案:

答案 0 :(得分:2)

请注意,您不会直接从POST获取JSON对象;它只是一个字符串,所以json_encode它没有意义。它已经编码,所以只需将其直接保存到文件中,而不通过编码器。

答案 1 :(得分:1)

您可以尝试使用JSON.stringify()将数据转换为适合存储在字符串中的格式,然后您可以使用JSON.parse()

再次将其解析回来
var savePromise = $http.post('save.php',{fileName:file_name, fileData: JSON.stringify(data)}).

答案 2 :(得分:1)

您正在对已经发布的数据执行json_encode。在这种情况下,您有一组键值对,并且所有值都是字符串格式。

您需要在客户端对它们进行编码,然后将您的JSON字符串放入可以POST的单个字段中。然后,该JSON字符串保留了所有数据类型。

var json_str = JSON.stringify(myobject); 

现在POST json_str,好像它是一个HTML表单字段。