PHP cURL发送JSON时如何去掉ID数组字符串外层的双引号?
问题原因
你当前存储ID的$available_cat_id_list、$available_rate_ids_list是字符串类型,而非PHP原生数组类型。调用json_encode()生成JSON时,字符串类型的值会被自动包裹双引号,最终生成的payload里数组结构被当成字符串处理,不符合API的参数格式要求。
解决方法
先将两个字符串格式的ID列表转换为PHP原生数组,再放入请求参数中即可。你可以直接用json_decode()处理这两个字符串,因为它们本身就是合法的JSON数组格式:
// 先将字符串转成PHP数组,第二个参数true表示返回数组而非对象 $categoryIds = json_decode($available_cat_id_list, true); $rateIds = json_decode($available_rate_ids_list, true); // 构造请求数据 $griddata = array( "agentId"=>'2', "categoryIds"=>$categoryIds, "dateFrom"=>'2021-12-11', "dateTo"=>'2021-12-18', "propertyId"=>'1', "rateIds"=>$rateIds ); // 正常json_encode即可得到符合要求的payload $payload = json_encode($griddata);
如果你的ID列表字符串是不带括号的逗号分隔格式(比如15,16,17,18),可以用explode(',', $available_cat_id_list)转成数组,再按需把元素转成整型即可。
生成的正确Payload示例
调整后生成的JSON会自动去掉categoryIds、rateIds外层的双引号,符合API要求:
{ "agentId":"2", "categoryIds":[15, 16, 17, 18], "dateFrom":"2021-12-11", "dateTo":"2021-12-18", "propertyId":"1", "rateIds":[7, 8, 9, 19, 20] }
内容的提问来源于stack exchange,提问作者Austen Osborne
相关产品推荐
相关产品推荐

