我在浏览器中呼叫此行:
example.com/save.php?params={"objID":"i8O0FRuGEr","username":"johndoe","password":123456,"email":"j@doe.com","followedBy":["john","sarah"]}
这是我的 save.php 代码:
<?php
include 'Config.php';
$getJSON = $_GET['params'];
echo 'getJSON: '.$getJSON.'<br><br>';
$updateArr = json_decode($getJSON, true);
echo 'UPDATE_ARR: ' .$updateArr; //<-- it prints 'null'...
$jsonStr = file_get_contents("Users.json");
// Decode the JSON string into a PHP array.
$objects = json_decode($jsonStr, true);
array_push($objects, $updateArr);
// Encode the array back into a JSON string and save it.
$jsonData = json_encode($objects);
file_put_contents("Users.json", $jsonData);
// echo data
echo 'JSON DATA: ' .$jsonData;
?>
问题是此代码使我的 User.json 文件为“ null”,它删除了其中的所有对象,实际上echo 'UPDATE_ARR: ' .$updateArr;
返回null。
我需要将$getJSON
字符串解码为PHP数组,就像对 User.json 文件($jsonStr
)所做的一样,但是它不起作用。 / p>
我在做什么错了?
非常感谢!
答案 0 :(得分:1)
这不是JSON字符串,但您不会正确urlencode()
查询字符串。
die(urlencode('{"objID":"i8O0FRuGEr","username":"johndoe","password":123456,"email":"j@doe.com","followedBy":["john","sarah"]}'));
^将上述PHP输出附加为params=
。
以POST
作为JSON
作为内容是正确的。
答案 1 :(得分:1)
似乎$ getJson为空。
使用var_dump函数或print_r函数检查其值。
var_dump($getJson); // see what is the output.
答案 2 :(得分:1)
PHP documentation指出,如果无法解码字符串,则json_decode()
返回NULL。很有可能是语法错误,原因是网址编码错误。
为什么首先要对json参数进行json编码? URL编码是在URL中传递参数的公认方法。
编辑:
print_r($updateArr);
显示正确的json,因此问题出在其他地方
您的代码还有其他几个问题。
echo 'UPDATE_ARR: ' .$updateArr;
引发注意:第6行中的数组到字符串的转换。根据您的PHP版本和配置,由于echo
中的错误类型转换,可能会打印NULL。 答案 3 :(得分:1)
我已经更新了您的代码,并在我这边对其进行了测试。请尝试。
<?php
include 'Config.php';
if(!empty($_GET['params'])){
$getJSON = $_GET['params'];
echo 'getJSON: '.$getJSON.'<br><br>';
$updateArr = json_decode($getJSON, true);
echo 'UPDATE_ARR: ';print_r($updateArr); //<-- it prints 'null'...
$jsonStr = file_get_contents("Users.json");
// Decode the JSON string into a PHP array.
$objects = json_decode($jsonStr, true);
array_push($objects, $updateArr);
// Encode the array back into a JSON string and save it.
$jsonData = json_encode($objects);
file_put_contents("Users.json", $jsonData);
// echo data
echo 'JSON DATA: ' .$jsonData;
}else{
echo 'Params is empty';
}
这是users.json
文件经过多次刷新后的结果:
getJSON:{“ objID”:“ i8O0FRuGEr”,“用户名”:“ johndoe”,“密码”:123456,“电子邮件”:“ j@doe.com”,“ followedBy”:[“ john “,“莎拉”]} UPDATE_ARR:数组([objID] => i8O0FRuGEr [用户名] => johndoe [密码] => 123456 [电子邮件] => j@doe.com [followedBy] =>数组([0] =>约翰[1] => sarah))JSON数据:{“ ID”:“ i8O0FRuGEr”,“ user_name”:“ johndoe”,“ pass”:123456,“ email_id”:“ j@doe.com”,“ followed_By”:[[“ john”, “ sarah”],“ 0”:{“ objID”:“ i8O0FRuGEr”,“用户名”:“ johndoe”,“密码”:123456,“电子邮件”:“ j@doe.com”,“ followedBy”:[“ john“,” sarah“]},” 1“:null,” 2“:{” objID“:” i8O0FRuGEr“,”用户名“:” johndoe“,”密码“:123456,”电子邮件“:” j @ doe .com“,” followedBy“:[” john“,” sarah“]},” 3“:{” objID“:” i8O0FRuGEr“,”用户名“:” johndoe“,”密码“:123456,”电子邮件“: “ j@doe.com”,“ followedBy”:[“ john”,“ sarah”]},“ 4”:{“ objID”:“ i8O0FRuGEr”,“用户名”:“ johndoe”,“密码”:123456, “ email”:“ j@doe.com”,“ followedBy”:[“ john”,“ sarah”]},“ 5”:{“ objID”:“ i8O0FRuGEr”,“用户名”:“ johndoe”,“密码“:123456,”电子邮件“:” j@doe.com“,” followedBy“:[” john“,” sarah“]},” 6“:{” objID“:” i8O0FRuGEr“,”用户名“:” johndoe “,”密码“:123456,”电子邮件“:” j@doe.com“,” followedBy“:[” john“,” sarah“]},” 7“:{” objID“:” i8 O0FRuGEr“,”用户名“:” johndoe“,”密码“:123456,”电子邮件“:” j@doe.com“,” followedBy“:[” john“,” sarah“]},” 8“:{” objID“:” i8O0FRuGEr“,”用户名“:” johndoe“,”密码“:123456,”电子邮件“:” j@doe.com“,” followedBy“:[” john“,” sarah“]}}}
使用users.json文件后:
[{“ objID”:“ i8O0FRuGEr”,“用户名”:“ johndoe”,“密码”:123456,“电子邮件”:“ j@doe.com”,“ followedBy”:[“约翰” ,“ sarah”]},{“ objID”:“ i8O0FRuGEr”,“用户名”:“ johndoe”,“密码”:123456,“电子邮件”:“ j@doe.com”,“ followedBy”:[“约翰” ,“ sarah”]},{“ objID”:“ i8O0FRuGEr”,“用户名”:“ johndoe”,“密码”:123456,“电子邮件”:“ j@doe.com”,“ followedBy”:[“约翰” ,“ sarah”]},{“ objID”:“ i8O0FRuGEr”,“用户名”:“ johndoe”,“密码”:123456,“电子邮件”:“ j@doe.com”,“ followedBy”:[“约翰” ,“ sarah”]},{“ objID”:“ i8O0FRuGEr”,“用户名”:“ johndoe”,“密码”:123456,“电子邮件”:“ j@doe.com”,“ followedBy”:[“约翰” ,“ sarah”]}]