PHP从文件解析JSON返回NULL值

时间:2013-10-17 08:21:49

标签: php json parsing


我试图从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”。另外,我是否遗漏了有关整数和数字解析的内容? 感谢。

2 个答案:

答案 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" }