将 JSON 字符串转换为 PHP 代码块
Converting a JSON string to PHP code block
有没有一种优雅的方法来转换这个 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()'ed 对象。我真的想以一串 PHP 代码结束,而不是 PHP 对象!
与您之后的内容并非 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,
),
);
$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 '</pre>';
有没有一种优雅的方法来转换这个 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()'ed 对象。我真的想以一串 PHP 代码结束,而不是 PHP 对象!
与您之后的内容并非 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,
),
);
$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 '</pre>';