
本文介绍如何在 php 中解析 json 字符串、遍历数组并安全修改指定键(如 "image")的值,为其添加固定前缀和后缀,最后重新编码为格式化且无转义斜杠的 json。
在实际 Web 开发中,经常需要对原始 JSON 数据进行结构化改造——例如将纯文件 ID(如 "12001116")转换为可直接访问的资源路径(如 "wp-content/upload/12001116.jpg")。PHP 提供了简洁高效的原生函数组合来完成这一任务:json_decode() 解析、array_map() 遍历处理、json_encode() 重新序列化。
以下是完整、健壮的实现方案:
<?php
// 原始 JSON 字符串(注意:需确保 UTF-8 编码,避免中文乱码)
$input = '[
{
"Image":"12001116",
"Name":"Jean-Marc",
"CODE_POSTAL":"12630 ",
"VIL":"AGEN D AVEYRON",
"LATITUDE":"44.343518",
"LONGITUDE":"2.716004"
},
{
"Image":"1200558",
"Name":"Aurélien ",
"CODE_POSTAL":"12630 ",
"VIL":"AGEN D AVEYRON",
"LATITUDE":"42.343828",
"LONGITUDE":"2.920056"
}
]';
// 步骤 1:解码为 PHP 对象数组(默认为对象;若需关联数组,传入 true)
$jsonArray = json_decode($input);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new RuntimeException('JSON 解析失败:' . json_last_error_msg());
}
// 步骤 2:使用 array_map 遍历并更新每个对象的 Image 字段
$processed = array_map(function ($item) {
// 安全检查:确保 Image 键存在且为字符串
if (isset($item->Image) && is_string($item->Image)) {
$item->Image = 'wp-content/upload/' . $item->Image . '.jpg';
}
return $item;
}, $jsonArray);
// 步骤 3:重新编码为 JSON,启用美化输出 + 不转义斜杠(避免出现 \/)
$output = json_encode($processed, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
echo $output;
?>✅ 关键要点说明:
- JSON_UNESCAPED_SLASHES 标志确保输出中的 / 不被转义为 \/,符合 URL 路径语义;
- JSON_PRETTY_PRINT 提升可读性(生产环境可移除以减小体积);
- 添加 json_last_error() 检查,增强容错能力;
- 显式判断 isset($item->Image) 和 is_string(),防止空值或非字符串类型引发拼接错误;
- 若需操作关联数组(而非对象),调用 json_decode($input, true),后续改用 $item['Image'] 访问。
该方法时间复杂度为 O(n),适用于数千条记录的批量处理,无需手动 foreach 循环,代码简洁且语义清晰。
立即学习“PHP免费学习笔记(深入)”;











