我正在尝试从 Arduino 传感器获取一些值并将它们传递给 php 网络服务器以进行一些计算,并将它们保存在 json 文件中。不幸的是,我对 json 了解不多。
我的问题是,虽然数据被正确插入到 JSON 文件中,但当我尝试从另一个函数中读取它们时,我获得了正确的键,但值为 NULL。
这是从 POST 请求中获取值并将它们保存在 JSON 文件中的函数。
<?php
include 'handledata.php';
//take data from POST
$light=$_POST["light"];
$temp=$_POST["temp"];
$sensors = array('light'=>$light, 'temp'=>$temp);
$fp=fopen('sensors.json', 'w');
fwrite($fp, json_encode($sensors));
fclose($fp);
echo "Sensor updated: calling data handler..\n";
handleData();
?>
这段代码确实有效。输出 sensors.json 如下所示:
{"light":"300","temp":"22"}
这是 handleData() 函数的代码:
<?php
function handleData(){
$json = file_get_contents('./sensors.json', true);
var_dump($json);
$sensors=json_decode($json, true);
var_dump($sensors);
}
?>
这两个转储如下所示:
string(26) "{"light":null,"temp":null}"
array(2) { ["light"]=> NULL ["temp"]=> NULL }
到目前为止,我尝试做的是更改 json 文件(第一个函数):我没有将值作为包含数字的字符串提供,而是提供了一个 int 和一个字符串,如下所示:
$l=intval($light);
$sensors = array('light'=>$l, 'temp'=>"eight");
现在sensors.json看起来像这样:
{"light":793,"temp":"eight"}
handleData 的输出如下所示:
string(26) "{"light":0,"temp":"eight"}"
array(2) { ["light"]=> int(0) ["temp"]=> string(5) "eight" }
我不知道可能是什么问题。使用字符串“8”它可以工作,但不能使用字符串“300”。另外,我是否遗漏了有关解析整数和数字的内容?谢谢。