Я видел много сообщений с этой ошибкой, но мне ничего не помогает. так вот моя ситуация:«invalid json-primitive» при преобразовании строки JSON
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);
});
После этого я сделать вызов AJAX для PHP скрипт, с этим:
$.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));
}
});
Консоль.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"}]
И Finaly РНР-скрипт делает shell_exec из PS-скрипта с JSon строкой в качестве параметра:
$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-строку в кавычки.
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}]
не знаю, почему котировки в пс устраняются.
Теперь, если преобразовать строку, как это:
$parsed = $zug_grps | Out-String | ConvertFrom-Json
Я получаю следующее сообщение об ошибке:
ConvertFrom-Json : Invalid JSON-primitive: USB_R.
Любая идея, что идет не так?
Я бы сказал, что это должно работать, но попробуйте '$ para = '-zug_grps.' .addslashes ($ zug_grps). '"'; ', Просто для хорошей меры. –
это волшебство! теперь кавычки находятся внутри строки, и все работает. Спасибо! – user2355509