You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 11:39:18