我正在尝试根据Stack Overflow问题/答案here的内容,通过JSON文件data.json
将Python的JSON信息发送到PHP。我在Raspberry Pi 3上的Apache Web服务器上运行此代码。
这是我的代码:
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退出。
{"age": 12, "fruit": ["oranges", "apples", "peaches"]}
正如您所看到的,我的Python运行良好,输出与我的python代码中的data
变量相同。在第二个想法,顺序是落后的,虽然我不认为这很重要。
现在,问题在于:
<?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的工作方式?
答案 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;]