【问题标题】:json_decode returning an array of 1json_decode 返回一个 1 的数组
【发布时间】:2012-07-11 16:28:31
【问题描述】:

我正在尝试将一些 JSON 解码为 php 数组。以下是代码摘录:

$getfile="{"fname":"bob","lname":"thomas","cascade":"bthomas","loc":"res","place":"home 2"}";
$arr = json_decode($getfile, true);
$arr['day3'] = $selecter;
echo(print_r($arr));

唯一返回的是“1”。我检查了 JSONLint 并且它是有效的 json,所以我想知道为什么 json_decode 失败。我还尝试在将 day3 键添加到数组之前检查数组是什么,但我仍然返回“1”。任何帮助表示赞赏!

实际代码:

$getfile = "";
    $getfile = file_get_contents($file);
    if ($getfile == "") {
        writeLog("Error reading file.");
    }
    writeLog("getfile is " . $getfile);
    writeLog("Decoding JSON data");
    $arr = json_decode($getfile, true);
    writeLog("Decoded raw: " . print_r($arr));
    writeLog("Editing raw data. Adding data for day " . $day);
    $arr['day3'] = $selecter;
    writeLog(print_r($arr));
    $newfile = json_enconde($arr);
    writeLog($newfile);
    if (file_put_contents($file, $newfile)) {
        writeLog("Wrote file to " . $file);
        echo $newfile;
    } else {
        writeLog("Error writting file");
    }

这些是 $file 的内容(它是一个文本文件)

{"fname":"Bob","lname":"Thomas","cascade":"bthomas","loc":"res","place":"home 2"}

【问题讨论】:

  • 你能发布你的实际代码吗?我希望出现解析错误而不是1
  • 尝试在 JSON 字符串的末尾加上单引号。
  • @mario 他看到1,因为嵌套了echo(print_r())print_r() 调用返回bool (true),当echoed 产生1。不过,您仍然希望看到数组输出... EDIT 哦,实际上,如果json_decode() 返回NULL(也可能是FALSE,不确定,它会以这种方式工作)我必须检查)
  • 不 $getfile = "";当文件获取内容时使 JSON 成为字符串?
  • @Vikram $getfile = "";是多余的,可以去掉,重新赋值时变量的当前类型不影响新类型。

标签: php json jsonp


【解决方案1】:

我们仍然不知道您的文件中有什么。但是如果:

"{"fname":"bob","lname":"thomas","cascade":"bthomas","loc":"res","place":"home 2"}"

然后多余的外部双引号会破坏 JSON,json_decode 将返回 NULL。使用json_last_error() 找出答案。也可能是 UTF-8 BOM 或其他东西...

无论如何,1print_r 的结果。 print_r 直接输出,不需要回显。也用于调试而不是使用var_dump()


更具体地说,您希望返回 print_r 输出(而不是布尔成功结果 1),然后将其写入日志。

所以使用:

      writeLog(print_r($arr, TRUE));

注意TRUE 参数。

【讨论】:

    【解决方案2】:

    首先,使用单引号。这将导致解析错误

    $getfile= '{"fname":"bob","lname":"thomas","cascade":"bthomas","loc":"res","place":"home 2"}';
    

    我假设你已经声明了 $selecter 并且它已经被分配了一些值。

    echo(print_r($arr)) 中删除回声您不需要回声。 print_r 也会输出。如果使用echo,则会在数组末尾显示1。

    工作代码:

    $getfile = '{"fname":"bob","lname":"thomas","cascade":"bthomas","loc":"res","place":"home 2"}';
        $arr = json_decode($getfile, true);
        $selecter = 'foobar';
        $arr['day3'] = $selecter;
        print_r($arr);
    

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      我在这样做时遇到了这个问题:

      if ($arr = json_decode($getfile, true)) {
          $arr['day3'] = $selecter;
          echo(print_r($arr));
      }
      

      在 if 之外对其进行解码是解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-05
        • 1970-01-01
        • 1970-01-01
        • 2020-07-15
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        相关资源
        最近更新 更多