Преобразование строки JSON в блок кода PHP - PullRequest
0 голосов
/ 16 мая 2019

Существует ли элегантный способ преобразования этой строки JSON:

{
  "my_index": 1,
  "first_name": "John",
  "last_name": "Smith",
  "address": {
    "address1": "123 Main St",
    "address2": "PO Box 123",
    "city": "Anywhere",
    "state": "CA",
    "zip": 12345
  }
}

В этот блок кода PHP:

$data = array();
$data["my_index"] = 1;
$data["first_name"] = "John";
$data["last_name"] = "Smith";

$data["address"] = array();
$data["address"]["address1"] = "123 Main St";
$data["address"]["address2"] = "PO Box 123";
$data["address"]["city"] = "Anywhere";
$data["address"]["state"] = "CA";
$data["address"]["zip"] = 12345;

По сути, сборка кода для вставки во что-то другое.Мне не нужен объект json_decode () '.Я буквально хочу закончить строкой кода PHP, а не объектом PHP!

Ответы [ 2 ]

1 голос
/ 16 мая 2019
<code>$string = '{
    "my_index": 1,
    "first_name": "John",
    "last_name": "Smith",
    "address": {
        "address1": "123 Main St",
        "address2": "PO Box 123",
        "city": "Anywhere",
        "state": "CA",
        "zip": 12345
    }
}';
$recursiveIterator = new RecursiveIteratorIterator(new RecursiveArrayIterator(json_decode($string, true)), RecursiveIteratorIterator::SELF_FIRST);
$data = array('$data = array();');

foreach ($recursiveIterator as $key => $value) {
    $currentDepth = $recursiveIterator->getDepth();
    $keys = array();

    // Traverse up array to get keys
    for ($subDepth = $currentDepth; $subDepth >= 0; $subDepth--) {
        $keys[] = $recursiveIterator->getSubIterator($subDepth)->key();
    }

    if (is_array($value)) {
        $data[] = '';
    }

    $data[] = '$data["' . implode('"]["', array_reverse($keys)) . '"] = ' . (!is_array($value) ? is_int($value) ? $value : '"' . $value . '"' : 'array()') . ';';
}

echo '<pre>';
print_r(implode("\n", $data));
echo '
';
1 голос
/ 16 мая 2019

Не на 100% то же самое, что и после, но эффективно создает фрагмент кода PHP, который вы можете использовать.Главное - декодировать его в массив PHP, а затем использовать var_export() для вывода результирующего массива.Добавьте немного шаблона вокруг него, чтобы получить код ...

$data='{
  "my_index": 1,
  "first_name": "John",
  "last_name": "Smith",
  "address": {
    "address1": "123 Main St",
    "address2": "PO Box 123",
    "city": "Anywhere",
    "state": "CA",
    "zip": 12345
  }
}';
echo '$data = '.var_export(json_decode($data, true), true).';';

дает вам

$data = array (
  'my_index' => 1,
  'first_name' => 'John',
  'last_name' => 'Smith',
  'address' => 
  array (
    'address1' => '123 Main St',
    'address2' => 'PO Box 123',
    'city' => 'Anywhere',
    'state' => 'CA',
    'zip' => 12345,
  ),
);
...