2016-03-31 304 views
-1

このエラーで多くの投稿を見ましたが、何も助けにはなりません。 はそうここに私の状況です:JSON文字列を変換するときに「無効な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); 
}); 

はこの後、私はこれで、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は私に出力を引用符で囲みます。

[{"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 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文字列を与えます。

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 : Invalid JSON-primitive: USB_R.

任意のアイデアを、何がうまくいかない

は今、私はこのような文字列が変換する場合は? JSONで

+0

私はそれがうまくいくはずだと思いますが、 '$ para = '-zug_grps' '.addslashes($ zug_grps)' '';'を試してみてください。 –

+0

これは魔法を行う!引用符は文字列の中にあり、すべては動作します。ありがとうございました!ありがとう。 – user2355509

答えて

1

文字列は、二重引用符で囲む必要があり、そのデータは、あなたが最初に掲載するもののようになります。

[{"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のstring¹でファンキーなことを行いますこのような単一引用符の間に二重引用符で文字列が動作しません:

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

は、JSON文字列とパットで二重引用符をエスケープしかし、二重引用符の間にエスケープされた文字列が動作しているようする:

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

がFTRを¹:私は驚いよりやや少ないです。

+0

ありがとうございます。引用符は元のjson-stringにあります。スクリプトから文字列を "Write-Host"すると、引用符がありません。これはパワーシェルの中に形作られているからですか? – user2355509

+0

文字列 'Write-Host'にあった場合はそれらを表示します。元の文字列はどのように作成され、スクリプトはどのくらい正確に呼び出されていますか? –

+0

は完全なプロセスを示す質問を更新しました。 – user2355509

関連する問題