当我将变量中的值传递给 JSON 代码时它不起作用但是如果我硬编码它在 PHP 中的值

Posted

技术标签:

【中文标题】当我将变量中的值传递给 JSON 代码时它不起作用但是如果我硬编码它在 PHP 中的值【英文标题】:It is not working when I pass the value from a variable to the JSON code but if I hardcode the value it works in PHP 【发布时间】:2020-11-19 01:01:21 【问题描述】:

当我将值从变量传递到 JSON 代码时它不起作用,但如果我硬编码它的值,它会起作用。

我试过的代码:

$countries = 'LK,AU,US';
$allowedCountries = str_getcsv($countries, ",");
$allowedCountries = ('","' . implode('","', $allowedCountries) . '');
var_dump ($allowedCountries);

输出: "","LK","AU","US"

问题是当我将变量的输出传递给下面的 API 代码时,它不起作用。但是如果我在下面的 API 代码中硬编码像 'countrySet' => ["","LK","AU","US"] 这样的相同输出,它就可以工作。

API 代码:

        CURLOPT_POSTFIELDS => json_encode([
            "ttl" => 300,
            'ipGeoRules' => json_encode([
                [
                    'action' => 'true',
                    'ipSet' => [],
                    'countrySet' => [$allowedCountries]
                ]
            ]),

【问题讨论】:

【参考方案1】:

硬编码值:

'countrySet' => ["","LK","AU","US"] 

不同于

'countrySet' => [$allowedCountries]

因为$allowedCountries已经是一个值数组,所以会产生一个嵌套数组:

'countrySet' => [
   [
     "LK",
     "AU",
     "US",
   ]
],

【讨论】:

虽然它不是一个数组。这是一个字符串,因为他们做了$allowedCountries = ('","' . implode('","', $allowedCountries) . '');【参考方案2】:

您似乎对这里的类型(字符串与数组)有些混淆。从外观上看,您可能只需在 $countries 上使用 explode() 并将该结果传递给您的 countrySet 参数。

    CURLOPT_POSTFIELDS => json_encode([
        "ttl" => 300,
        'ipGeoRules' => json_encode([
            [
                'action' => 'true',
                'ipSet' => [],
                'countrySet' => explode(",", $countries)
            ]
        ])

该值是一个数组,但由于您使用json_encode(),它将被编码为一个字符串。

作为脚注,你真的需要使用两次json_encode() 吗?不应该只在整个数组上需要它吗(而不是在外部数组上,以及ipGeoRules 参数上)?

【讨论】:

感谢您的解决方案。我一直在尝试传递方括号内的值,例如“countrySet”=> [$allowedCountries]。当我删除它们并像您一样传递值时,它起作用了。【参考方案3】:

那是因为您需要将字符串转换为数组。

试试 echo gettype($allowedCountries) 看看是字符串还是数组。

将国家转换为数组。

【讨论】:

以上是关于当我将变量中的值传递给 JSON 代码时它不起作用但是如果我硬编码它在 PHP 中的值的主要内容,如果未能解决你的问题,请参考以下文章

为啥当我解析我的响应 okHttp 时它不起作用

为啥我的代码在传递给 .exe 时不起作用?

将DataTable传递给存储过程中的表值参数不起作用[关闭]

php登录页面 - 当我插入有效数据时它不起作用,但是当我插入无效数据时它完美地工作[重复]

javascript 不读取 html 中的值

一个 href 链接不起作用-当我单击链接 snimka1.html 时它不起作用,可能是许多 div 标签?-