2016-03-31 22 views
-1

Bu hatayla ilgili birçok gönderi gördüm, ancak hiçbir şey bana yardımcı olmuyor. işte benim durumdur:JSON dizgisini dönüştürürken "geçersiz json-ilkel"

json böyle jquery tarafından oluşturulan

:

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); 
}); 

Bundan sonra, ben bu ile, bir php komut için bir ajax arama yapmak

:

$.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 bana teklifleri çıktı verir.

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

Ve php-script sonda gelen

parametre olarak json dize ile ps-komut bir shell_exec yapar:

$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; 

Ayrıca, bu yankı tırnak İLE json-string verir.

script.ps1 şuna benzer:

param( 
     [string]$zug_grps 
    ) 

`Write-Host $zug_grps` 

çıktı şuna benzer: ps tırnak elimine neden

[{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}] 

Bilmiyorum.

$parsed = $zug_grps | Out-String | ConvertFrom-Json 

aşağıdaki hatayı alıyorum:

ConvertFrom-Json : Invalid JSON-primitive: USB_R.

konusunda fikrin ne yanlış gidiyor

Şimdi böyle dize dönüştürmek olur? JSON

+0

Bunun işe yarayacağını söyleyebilirim, ama '$ para =' -zug_grps '' .addslashes ($ zug_grps). '' '; ', Sadece iyi bir önlem için. –

+0

bu sihir yapar! şimdi tırnaklar dizgenin içinde ve tüm işlerde. Teşekkür ederim! – user2355509

cevap

1

Strings çift tırnak içinde olmalıdır, bu nedenle veri öncelikle ne yayınlanmıştır gibi bakmak gerekir:

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

Düzenleme: Anlaşılan PHP böylece koyarak, JSON string¹ ile korkak şeyler yapar böyle tek tırnak arasındaki çift tırnak bir dize çalışmaz:

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

JSON dize ve vurmak çift tırnak Kaçış olsa da, çift tırnak arasına kaçan dize iş gibi görünüyor ing:

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

FTR ¹: Sürpriz biraz daha az duyuyorum.

+0

teşekkürler. alıntılar orijinal json-string'dedir. betikteki "Write-Host" dizgesini yazdığımda, tırnak işareti yoktur. Bu, powershell içindeki bir biçimlendirme yüzünden mi? – user2355509

+0

Eğer "Yazma-Host" dizgesindeydiler, onları gösterecekti. Özgün dize nasıl oluşturulur ve komut dosyası tam olarak nasıl adlandırılır? İşlemin tamamını gösteren soru –

+0

güncellendi. – user2355509

İlgili konular