Laravel 9中如何将ShortJSON映射转换为外部API要求的LongJSON
Laravel 9 ShortJSON 转 LongJSON 映射实现方案
核心思路
先建立ShortJSON键与LongJSON字段前缀的映射关系,初始化全量目标字段为false,再遍历ShortJSON数据将指定字段设为true,最后包装成外部API要求的格式。
代码实现
假设用户提交的ShortJSON已解析为数组$shortData(可通过$request->json('restrictions')获取):
// 1. 定义Short键到Long字段前缀的映射 $keyMappings = [ 'crown_top_left' => 'crown_upper_left_', 'crown_top_right' => 'crown_upper_right_', 'crown_bottom_left' => 'crown_lower_left_', 'crown_bottom_right' => 'crown_lower_right_' ]; // 2. 初始化所有LongJSON字段为false(覆盖外部API要求的全量字段) $longData = []; foreach (['upper_left', 'upper_right', 'lower_left', 'lower_right'] as $position) { for ($i = 1; $i <= 8; $i++) { $longData["crown_{$position}_{$i}"] = false; } } // 3. 遍历ShortJSON数据,将指定字段设为true foreach ($shortData['restrictions'] as $shortKey => $toothNumbers) { if (isset($keyMappings[$shortKey])) { $prefix = $keyMappings[$shortKey]; foreach ($toothNumbers as $num) { $targetField = $prefix . $num; if (array_key_exists($targetField, $longData)) { $longData[$targetField] = true; } } } } // 4. 组装成外部API要求的格式并转JSON $longJson = json_encode([ 'crown_Tooths_obj' => $longData ], JSON_PRETTY_PRINT);
关键说明
- 映射表:解决ShortJSON与LongJSON的命名差异(如
crown_top_left对应crown_upper_left_*),后续新增字段只需补充映射关系即可。 - 全量初始化:确保生成的LongJSON包含外部API要求的所有字段,避免因缺失字段导致同步失败。
- 安全校验:通过
array_key_exists检查目标字段是否存在,防止非法数字导致的数组键错误。
为什么array_map/array_diff不适用
这类函数更适合元素级别的转换或集合差异计算,但你的需求需要先构建全量默认值,再针对性修改,遍历+映射的方式更直接匹配业务逻辑。
内容的提问来源于stack exchange,提问作者Zasha
相关产品推荐
相关产品推荐

