我试图从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”。另外,我是否遗漏了有关整数和数字解析的内容? 感谢。
答案 0 :(得分:0)
为什么不直接将数组传递给函数?
handleData($sensors);
一个函数应该是可重用的,所以期待一个参数并用它做一些事情而不是读取函数内的文件内容。
<?php
function handleData($sensors){
var_dump($sensors);
// do something
}
?>
我已经看过你的评论,试试这个,如果需要的话,将$ _GET更改为$ _POST。
<?php
function handleData ($array) {
var_dump($array);
// do something later
}
if (!empty($_GET)) {
file_put_contents("sensor.json", json_encode($_GET));
handleData(json_decode(file_get_contents("sensor.json"), true));
}
?>
答案 1 :(得分:0)
在我的localhost上测试了代码,我使用了这个index.php:
<?php
include 'handledata.php';
//take data from POST
if (isset($_POST['submit'])) {
$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();
}
?>
<form method="post" action="index.php">
<input type="text" name="light" value="300" />
<input type="text" name="temp" value="22" />
<button type="submit" name="submit">Send!</button>
</form>
这给了我以下输出:
Sensor updated: calling data handler.. string(27) "{"light":"300","temp":"22"}" array(2) { ["light"]=> string(3) "300" ["temp"]=> string(2) "22" }