我看过很多有这个错误的帖子,但没有任何帮助我。 所以这是我的情况:
json是由jquery创建的,如下所示:
json_zug_grp = [];
$('#bx_zuggrp:checked').each(function() {
var name = $(this).attr("name");
var value = $(this).val();
item = {}
item ["name"] = name;
item ["value"] = value;
json_zug_grp.push(item);
});
在此之后,我对php脚本进行ajax调用,其中包含:
$.ajax({
url: 'psexec.php',
type: "POST",
cache: false,
async: false,
data:{
zug_grps:JSON.stringify(json_zug_grp)
},
success: function(text){
console.log(JSON.stringify(json_zug_grp));
}
});
console.log为我提供输出WITH引号。
[{"name":"USB_R","value":"CN=USB_R,OU=ZuGrp,OU=SecGrp,DC=DOMAIN,DC=loc"},{"name":"DVD_R","value":"CN=DVD_R,OU=ZuGrp,OU=SecGrp,DC=DOMAIN,DC=loc"}]
最后,php脚本使用json字符串作为参数从ps脚本创建一个shell_exec:
$zug_grps = $_POST["zug_grps"];
$para = " -zug_grps '".$zug_grps."'";
$psPath = "powershell.exe";
$psDIR = "C:\\path\\to\\scriptfolder\\";
$psScript = "script.ps1";
$runScript = $psDIR. $psScript;
$runCMD = $psPath." ".$runScript." ".$para;
$output = shell_exec($runCMD);
echo $output;
此回显也为json-string提供了引号。
script.ps1如下所示:
param(
[string]$zug_grps
)
`Write-Host $zug_grps`
输出如下:
[{name:USB_R,value:CN=USB_R,OU=ZuGrp,OU=SecGrp,DC=DOMAIN,DC=loc},{name:DVD_R,value:CN=DVD_R,OU=ZuGrp,OU=SecGrp,DC=DOMAIN,DC=loc}]
不知道为什么ps中的引号被消除了。
现在,如果我像这样转换字符串:
$parsed = $zug_grps | Out-String | ConvertFrom-Json
我收到以下错误:
ConvertFrom-Json:无效的JSON原语:USB_R。
任何想法,出了什么问题?
答案 0 :(得分:1)
JSON中的字符串必须是双引号,因此数据必须与您首次发布的内容类似:
[{"name":"USB_R","value":"CN=USB_R,OU=ZuGrp,OU=SecGrp,DC=DOMAIN,DC=loc"},{"name":"DVD_R","value":"CN=DVD_R,OU=ZuGrp,OU=SecGrp,DC=DOMAIN,DC=loc"}]
编辑:显然,PHP使用JSON字符串¹做了时髦的事情,所以在这样的单引号之间放一个带双引号的字符串不起作用:
$para = " -zug_grps '".$zug_grps."'";
转义JSON字符串中的双引号并将转义字符串放在双引号之间似乎有效:
$para = ' -zug_grps "'.addslashes($zug_grps).'"';
¹FTR:我有点不高兴。