Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP::如果json值包含编码数据,如何将json对象转换为数组?_Php_Json - Fatal编程技术网

PHP::如果json值包含编码数据,如何将json对象转换为数组?

PHP::如果json值包含编码数据,如何将json对象转换为数组?,php,json,Php,Json,我正在尝试使用php将json数据转换为数组。但不幸的是,我的json数据包含编码值。因此,我无法在php中将此json对象转换为数组。我尝试了不同的方法,但我找不到任何解决方法 这是我从客户端获得的URL数据 controller.php?type=assignPacksToServer&sid=54&skey=j59fsWqaBw!啊!KoTbhC&svid=268&packs=[{“packid”:“22”,“pverid”:“18”,“yaml”:“-%20url%3A%20%2Fsta

我正在尝试使用php将json数据转换为数组。但不幸的是,我的json数据包含编码值。因此,我无法在php中将此json对象转换为数组。我尝试了不同的方法,但我找不到任何解决方法

这是我从客户端获得的URL数据

controller.php?type=assignPacksToServer&sid=54&skey=j59fsWqaBw!啊!KoTbhC&svid=268&packs=[{“packid”:“22”,“pverid”:“18”,“yaml”:“-%20url%3A%20%2Fstatic%0A%20static\u dir%3A%20a%0A-%20url%3A%20.*%0A%20%20script%3A%20provider.py”},{“packid”:“23”,“pverid”:“19”,“yaml”:“-%20url%3A%20%2Fstatic%0A%20%20a%20a%20a%0A-%20url%20a%20a%20a%20py

PHP代码: 不幸的是,它没有打印任何内容。如果我发送空包数据,那么它会打印ok。非常感谢您的帮助

谢谢你,
苏莱塞

您的php文件是controller.php吗?在不使用
urldecode
的情况下尝试您的命令。在调用脚本时,解码已经完成


所以只要
json_解码($_POST[“yourparameter”])

首先,如果它来自URL,那么它是GET,而不是POST。此外,您还需要以另一种方式进行:

$packs = json_decode($_GET["packs"],true);
foreach($packs as $n => $value)
    if (isset($value['yaml']))
        $packs[$n]['yaml'] = urldecode($value['yaml']);
print_r($packs);
希望有帮助

编辑: 显示代码片段完美工作的屏幕截图:


是的,controller.php是我的文件。我照你说的做了,但还是没印出来。试用代码----------------$packs=json_decode($post[“packs”],true);印刷品(套)@user400091:您在那里有一个拼写错误,应该是:
$packs=json\u decode($\u REQUEST[“packs”],true);印刷品(套)当我尝试使用您的代码时。它抛出类似以下警告的错误:为…中的foreach()提供的参数无效。。。。请检查我的urldata并给出解决方案。我正在尝试使用此代码$obj=斜杠($get['packs'])$obj=json_decode($obj,true);印刷费($obj);但是它的打印格式不是数组打印格式[{“packid”:“22”,“pverid”:“18”,“yaml”:-url:/static\u-dir:static-url:.*script:provider.py”},{“packid”:“23”,“pverid”:“19”,“yaml”:-url:/static\u-dir:static-url:.*script provider.py}]{“status”:“ok”,“msg”:“Service package\/zetaservices配置已成功保存。”}感谢您我给您的代码非常适合您在初始问题中添加的输出(相信我,我已经测试过了)。它假设$\u获得['packs']实际上,它包含“packs=”后面的字符串,这里的stripslashes实际上是不需要的,除非你启用了magic_quotes,但考虑到你的原始粘贴,我认为情况并非如此。你首先需要进行json解码,将整个内容转换成一个数组,然后对数组中的值进行进一步解码,而不是对另一个值进行解码反过来说。当我尝试使用$packs=json_decode($\u GET[“packs”],true)时,它返回字符串而不是数组。print_r()只打印json字符串。当我使用is_string()和is_array()测试返回值($packs)时,它会显示is_string()-true和is_array()是错误的。我非常犹豫是否要解决这个问题。如果你得到正确的输出,请将代码粘贴到这里。我会在我的系统中尝试。那么你一定不会给我们所有的信息。正如我所说:我在回复中使用了你给出的变量编写了代码段。我所做的唯一一件事是从url中剪切packs=后面的部分并分配这是另一个变量。请看我在帖子中的更新。
$packs = json_decode($_GET["packs"],true);
foreach($packs as $n => $value)
    if (isset($value['yaml']))
        $packs[$n]['yaml'] = urldecode($value['yaml']);
print_r($packs);