php合并多个json字符串需先解码为数组,再用array_merge等函数合并,最后编码;注意结构一致性、键冲突处理及json合法性校验。

PHP 中多个 JSON 字符串不能直接拼接,必须先解码为 PHP 数据结构(数组或对象),合并后再重新编码为 JSON。关键在于保持数据结构一致性(比如都是关联数组)、处理键冲突(尤其是同名键时的覆盖或合并逻辑)。
1. 简单合并:相同结构的 JSON 数组(追加元素)
适用于多个 JSON 都是数组格式,想把它们“连起来”成一个大数组:
- 用 json_decode($json, true) 将每个 JSON 字符串转为关联数组
- 用 array_merge() 合并多个数组(注意:索引数组会重排,关联数组键名冲突时后者覆盖前者)
- 用 json_encode() 输出结果
示例:
$json1 = '[{"id":1,"name":"A"}]';
$json2 = '[{"id":2,"name":"B"},{"id":3,"name":"C"}]';
$arr1 = json_decode($json1, true);
$arr2 = json_decode($json2, true);
$merged = array_merge($arr1, $arr2);
$result = json_encode($merged, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
2. 合并 JSON 对象(键值对合并)
若多个 JSON 是对象(如 {"a":1}、{"b":2}),想合并成一个对象:
- 同样先 json_decode(..., true)
- 用 array_merge($arr1, $arr2) 即可——PHP 关联数组合并等价于 JSON 对象合并
- 注意:同名键会被后一个数组的值覆盖
如需深度合并(嵌套对象也递归合并),可用 array_replace_recursive() 替代 array_merge()。
3. 处理错误和边界情况
实际使用中必须检查 JSON 是否合法:
- 用 json_last_error() === JSON_ERROR_NONE 判断解码是否成功
- 空字符串、null、非 UTF-8 编码都可能导致解码失败
- 建议封装成函数,统一处理错误并返回有意义提示
示例片段:
$data = [];
foreach ($jsonStrings as $json) {
$decoded = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new InvalidArgumentException("Invalid JSON: " . $json);
}
$data = array_merge($data, $decoded);
}
return json_encode($data);
4. 合并带重复键的关联数据(如按 ID 合并用户列表)
如果多个 JSON 都是用户数组,且想按 "id" 去重或合并字段,不能只靠 array_merge:
- 先解码所有 JSON 为数组
- 遍历并以
id为键重建数组(自动去重) - 或用 array_merge_recursive() + 自定义逻辑合并同 ID 的字段
例如去重保留最后出现的用户:
$users = [];
foreach ($jsonStrings as $json) {
$list = json_decode($json, true);
foreach ($list as $user) {
$users[$user['id']] = $user; // 自动覆盖重复 id
}
}
$result = json_encode(array_values($users), JSON_UNESCAPED_UNICODE);
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











