PHP называет «null» для файла JSON, написанного Python

Я пытаюсь отправить информацию 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.

Файл JSON

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

Как вы можете видеть, мой Python отлично работал, и результат идентичен переменной data в моем коде python. С другой стороны, порядок отсталый, хотя я не думаю, что это имеет значение.

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?

Related of "PHP называет «null» для файла JSON, написанного Python"

Исходный код с вопросами:

 <?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); ?> 

Вышеприведенный фрагмент возвращает ["апельсины", "яблоки", "персики"]