2016-03-31 2 views
-1

Я видел много сообщений с этой ошибкой, но мне ничего не помогает. так вот моя ситуация:«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.

Любая идея, что идет не так?

+0

Я бы сказал, что это должно работать, но попробуйте '$ para = '-zug_grps.' .addslashes ($ zug_grps). '"'; ', Просто для хорошей меры. –

+0

это волшебство! теперь кавычки находятся внутри строки, и все работает. Спасибо! – user2355509

ответ

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"}]

Edit: Видимо PHP делает фанки вещи с string¹ JSON, поэтому ввод строка с двойными кавычками, одинарными кавычками, как это не работает:

$para = " -zug_grps '".$zug_grps."'"; 

Экранирования двойных кавычек в строке JSON и ударе ИНГ сбежавший строки в двойные кавычки, кажется, работает, хотя:

$para = ' -zug_grps "'.addslashes($zug_grps).'"'; 

¹ FTR: Я несколько меньше, чем удивлен.

+0

спасибо. кавычки находятся в исходной json-строке. когда i «Write-Host» - строка из скрипта, там не кавычки. Это из-за формирования внутри powershell? – user2355509

+0

Если бы они были в строке 'Write-Host', они бы отображали их. Как создается исходная строка и как именно называется скрипт? –

+0

обновил вопрос, показывающий полный процесс. – user2355509

Смежные вопросы