【问题标题】:PHP cURL json encoding - remove quotes around string of IDs?PHP cURL json 编码 - 删除 ID 字符串周围的引号?
【发布时间】:2021-11-04 07:18:36
【问题描述】:

我正在向 api 发布帖子,并使用 php 构建 cURL。

这是编译要发送的数据集的php:

$griddata = array(
  "agentId"=>'2',
  "categoryIds"=>$available_cat_id_list,
  "dateFrom"=>'2021-12-11',
  "dateTo"=>'2021-12-18',
  "propertyId"=>'1',
  "rateIds"=>$available_rate_ids_list
);

这两个变量包含一串 ID,如下所示: [15、16、17、18、19、20]

发送的数据如下所示:

{
"agentId":"2",
"categoryIds":"[15, 16, 17, 18]",
"dateFrom":"2021-12-11",
"dateTo":"2021-12-18",
"propertyId":"1",
"rateIds":"[7, 8, 9, 19, 20]"
}

这失败了。但是,当我手动添加两个不带引号的值时,它会起作用,例如:

"categoryIds":[15, 16, 17, 18],

我怎样才能让 php 以这种格式制作有效载荷?

谢谢!

【问题讨论】:

  • 听起来像非常好的行为,如果,如您所说,那些“包含 a string 的 ID 像这样”。制作这些字符串数组,它应该可以正常工作
  • 为什么你把你的列表放在一个字符串中,然后变成一个数据结构,然后再变成另一个字符串?顺便说一句:请养成在此处提问之前提取并提供minimal reproducible example 的习惯。您会注意到这与 cURL 完全无关!此外,清楚地说明你做了什么,你得到了什么以及你想要什么(+为什么)可能会引导你自己找到解决方案。

标签: php json api curl


【解决方案1】:

当你的变量中有一个字符串时,这个字符串将被放入数组中,然后编码为 json 作为字符串。如果你想将它编码为 json 作为数组,你应该传递一个数组:

$available_cat_id_list = [15, 16, 17, 18];
$griddata = [
    'categoryIds' => $available_cat_id_list,
];

如果你的数据已经是一个字符串,你可以把它提取到数组中:

$available_cat_id_list = "[15, 16, 17, 18]";
//strip left [
$available_cat_id_list = ltrim($available_cat_id_list, '[');
//strip right ]
$available_cat_id_list = rtrim($available_cat_id_list, ']');
//explode by comma
$available_cat_id = explode(',', $available_cat_id_list);
//convert to integers
$available_cat_id = array_map('intval', $available_cat_id);

$griddata = [
    'categoryIds' => $available_cat_id,
];

【讨论】:

  • 因为整数列表似乎是 JSON,所以也可以使用'categoryIds' => json_decode(available_cat_id_list),,它比这个(仍然完全有效!)示例更短,并且还会产生一个整数数组。
  • @RickN - 成功了,非常感谢!如何将其标记为已接受的答案?
  • @AustenOsborne 随意接受 fsw 的回答,我的建议只是一种更短的方法,他的解释——“为什么”会发生这种情况以及“如何”解决它,通过从字符串——比“这是最短的方法”更重要。 :-)
猜你喜欢
  • 2018-10-29
  • 2023-04-08
  • 2021-08-11
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 2013-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多