我使用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;
感谢您提出的所有建议!
答案 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表单字段。