PHP写作' null'用于Python编写的JSON文件

时间:2017-11-22 22:05:01

标签: php json

我正在尝试根据Stack Overflow问题/答案here的内容,通过JSON文件data.json将Python的JSON信息发送到PHP。我在Raspberry Pi 3上的Apache Web服务器上运行此代码。

这是我的代码:

的Python

import sys, json, random # I know I don't need sys and random to run this, but I was using these in my previous code.
data = {'fruit':['oranges', 'apples', 'peaches'], 'age':12}
with open('data.json', 'w') as outfile:
    json.dump(data, outfile)

运行时,此程序运行正常,并以代码0退出。

JSON文件

{"age": 12, "fruit": ["oranges", "apples", "peaches"]}

正如您所看到的,我的Python运行良好,输出与我的python代码中的data变量相同。在第二个想法,顺序是落后的,虽然我不认为这很重要。

PHP

现在,问题在于:

<?php
$string = file_get_contents("data.json");
$json_a = json_decode($string, true);
$arr = array();
foreach ($json_a as $key) {
    array_push($arr,json_decode($key[0],true));
}
echo json_encode($arr);
?>

运行时,程序以代码0退出但输出:

[null,null]

有没有人知道为什么会这样,或者这只是JSON的工作方式?

1 个答案:

答案 0 :(得分:1)

包含问题的原始代码:

<?php
$string = file_get_contents("data.json");
$json_a = json_decode($string, true);
$arr = array();
foreach ($json_a as $key) {
    // No need to use json_decode again
    // as it is already converted to an array
    // by the inital json decode statement
    array_push($arr,json_decode($key[0],true));
}
echo json_encode($arr);
?>

漂亮打印的PHP数组,存储在$ json_a:

Array
(
    [age] => 12
    [fruit] => Array
        (
            [0] => oranges
            [1] => apples
            [2] => peaches
        )

)

问题:

在原始脚本中,json_decode用于已经解码的变量/数组,它没有返回任何内容,因此null被附加到列表中。

代码演练: 在foreach循环的第一次迭代期间,

$ key的值为 12 - 这是一个字符串

在foreach循环的第二次迭代中,

$ key将具有值 - 这是一个数组

Array
(
    [0] => oranges
    [1] => apples
    [2] => peaches
)

用于打印所有水果的更正代码:

<?php
$string = file_get_contents("data.json");
$json_a = json_decode($string, true);
$arr = array();
foreach ($json_a['fruit'] as $key) {
    array_push($arr,$key);
}
echo json_encode($arr);
?> 

以上代码段会返回[&#34;橙子&#34;,&#34;苹果&#34;,&#34;桃子&#34;]