PHP中如何将变量存储的JSON对象拆分为多个独立JSON对象
PHP拆分JSON对象实现方案
注意:你提供的原始JSON存在语法错误(每个items节点后多了多余的逗号、数组元素闭合不规范),直接调用PHP解析函数会报错,需要先修正语法后再处理
实现逻辑
- 用
json_decode()把原始JSON字符串解析为PHP数组 - 遍历
results数组,逐个提取id字段、items字段 - 用
json_encode()把单独的items字段转回格式化的JSON字符串 - 可以根据需求把结果存为动态变量或者数组,数组管理更稳妥不会出现变量名冲突
完整可运行代码
<?php // 修正语法后的原始JSON字符串 $originalJson = <<<JSON { "results":[ { "id":"001", "items":{ "item11":"value1", "item12":"value2", "item13":"value3" } }, { "id":"002", "items":{ "item21":"value1", "item22":"value2", "item23":"value3" } }, { "id":"003", "items":{ "item31":"value1", "item32":"value2", "item33":"value3" } } ] } JSON; // 解析JSON为关联数组 $parseData = json_decode($originalJson, true); // 校验解析结果 if (json_last_error() !== JSON_ERROR_NONE) { die('JSON解析失败:' . json_last_error_msg()); } // 方式1:生成动态变量(符合你要求的$id1、$id2命名格式) foreach ($parseData['results'] as $key => $value) { $idVarName = 'id' . ($key + 1); $itemJsonVarName = 'itemJson' . ($key + 1); // 赋值id变量 $$idVarName = $value['id']; // 赋值items对应的格式化JSON,JSON_PRETTY_PRINT用于格式化输出 $$itemJsonVarName = json_encode($value['items'], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); // 测试输出 echo '$' . $idVarName . ' = "' . $$idVarName . '";' . PHP_EOL . PHP_EOL; echo $$itemJsonVarName . PHP_EOL . PHP_EOL; } // 方式2:用数组存储(更推荐,便于后续批量处理) $processedData = []; foreach ($parseData['results'] as $value) { $processedData[] = [ 'id' => $value['id'], 'item_json' => json_encode($value['items'], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) ]; } ?>
输出效果
运行上述代码后会直接输出你要求的格式:
$id1 = "001"; { "item11": "value1", "item12": "value2", "item13": "value3" } $id2 = "002"; { "item21": "value1", "item22": "value2", "item23": "value3" } $id3 = "003"; { "item31": "value1", "item32": "value2", "item33": "value3" }
内容的提问来源于stack exchange,提问作者Snowfire
相关产品推荐
相关产品推荐

