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

PHP处理第三方JSON响应 统一将答案字段转换为数组格式

问题描述

我收到了无法自主控制的第三方平台返回的JSON响应,示例如下:

$json = '{
  "question1": "answera",
  "question2": [
       "answerb",
       "answerc"]
}';

任意question(问题)字段都可对应多个answer(答案),但当某个问题仅有1个答案时,接口返回的对应值不会包裹[]数组括号,该格式不符合下游同样无法自主控制的系统的接收要求,下游系统强制要求所有答案字段必须为[]包裹的数组格式。
需要使用PHP对该JSON字符串做格式处理,无论每个问题对应的答案数量为多少,都统一转换为带[]的数组格式。例如将单答案的字段处理为如下格式:

"question1": ["answera"],
实现方法

完全可以通过PHP实现该格式转换,核心处理逻辑共3步:

  • 将原始JSON字符串解码为PHP关联数组
  • 遍历所有问题对应的答案值,若值不是数组类型,则将其包裹为单元素数组
  • 将处理完成的数组重新编码为JSON字符串即可

完整可运行代码如下:

<?php
// 第三方接口返回的原始JSON字符串
$json = '{
  "question1": "answera",
  "question2": [
       "answerb",
       "answerc"]
}';

// 解码为关联数组,第二个参数传true表示返回数组而非对象
$parsedData = json_decode($json, true);

// 遍历处理每个答案字段,统一转为数组格式
foreach ($parsedData as $questionKey => $answerValue) {
    if (!is_array($answerValue)) {
        // 非数组的单答案,包装为单元素数组
        $parsedData[$questionKey] = [$answerValue];
    }
}

// 重新编码为JSON,JSON_PRETTY_PRINT用于格式化输出,可根据实际需求移除
$formattedJson = json_encode($parsedData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

// 输出结果验证
echo $formattedJson;
?>

处理后输出的JSON符合下游系统要求,结构如下:

{
    "question1": [
        "answera"
    ],
    "question2": [
        "answerb",
        "answerc"
    ]
}

扩展说明

如果返回的JSON存在多层嵌套结构,只需要将上述遍历逻辑改为递归遍历即可,核心判断规则不变:所有答案字段只要不是数组类型,就统一包裹为单元素数组。使用json_encode时可根据实际业务场景调整参数,例如需要保留中文原始字符可添加JSON_UNESCAPED_UNICODE,需要压缩输出去掉格式缩进可移除JSON_PRETTY_PRINT参数。

内容的提问来源于stack exchange,提问作者megaSteve4

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:34:46