Я пытаюсь отправить информацию JSON с Python на PHP через JSON-файл data.json
, основываясь на содержании вопроса / ответа о переполнении стека. Я запускаю этот код на веб-сервере Apache на Raspberry Pi 3.
Вот мой код:
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 отлично работал, и результат идентичен переменной data
в моем коде python. С другой стороны, порядок отсталый, хотя я не думаю, что это имеет значение.
Теперь вот в чем проблема:
<?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?
Исходный код с вопросами:
<?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); ?>
Вышеприведенный фрагмент возвращает ["апельсины", "яблоки", "персики"]