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

如何将创建患者的cURL API请求转PHP?qas JSON无效报错如何解决?

问题原因及修复方案

问题原因

  • qas参数的JSON结构不匹配
    原cURL请求中qas对应的JSON为包含q、a两个一级键的对象,每个键下是以问题ID为键的键值对结构:
{
  "q": {
    "1": "Can you speak?",
    "2": "Can you hear?"
  },
  "a": {
    "1": "Yes",
    "2": "Yes "
  }
}

你定义的$myArray是二维索引数组,json_encode后输出的是[["Can you speak?","Can you hear?"],["Yes","Yes"]],和接口要求的结构完全不一致,因此触发JSON格式校验错误。

  • 提交格式不匹配(次要影响项)
    原cURL使用--form参数提交,对应multipart/form-data格式的POST请求;你使用http_build_query处理参数后提交的是application/x-www-form-urlencoded格式,和原请求逻辑不一致,部分接口会因此出现参数解析异常。

修复方案

调整qas的数组结构,同时对齐原请求的提交方式即可,修复后的完整代码如下:

<?php
$ch = curl_init();
// 调整为接口要求的qas结构
$qasArr = [
    'q' => [
        '1' => 'Can you speak?',
        '2' => 'Can you hear?'
    ],
    'a' => [
        '1' => 'Yes',
        '2' => 'Yes '
    ]
];
$jsonQas = json_encode($qasArr);

$url = "https://www.b2bmd.app/api.php?fn=patient-info";
$dataarr = [
    "firstname" => "John",
    "lastname" => "Mike",
    "email" => "John20124@yahoo.com",
    "phone" => "(781) 921-4790",
    "address1" => "7231 street 4",
    "qas" => $jsonQas
]; 

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
// 直接传数组,CURL会自动设置为multipart/form-data格式,和原cURL逻辑一致
curl_setopt($ch, CURLOPT_POSTFIELDS, $dataarr);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$resp = curl_exec($ch); 
if($e = curl_error($ch))
{
    echo $e;
}
else
{
    $decode = json_decode($resp, true); 
    print_r($decode);
}
curl_close($ch);
?>

如果接口明确要求用urlencoded格式提交,保留http_build_query也可以,只要qas结构正确就不会报JSON错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:54:03