空の数値を含むテーブルをJSONとして保存すると、無効なJSONプリミティブになりますか?次のように、数値列の1つに空の値を持つテーブルを保存する場合:
New Table( "testEmpty",
Add Rows( 2 ),
New Column( "Col1",
Character,
"Nominal",
Set Selected,
Set Values( {"test", "test"} )
),
New Column( "Col2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [., .] )
)
)JSONファイルとして、次のようになります。
[
{
"Col1" : "test",
"Col2" : .
},
{
"Col1" : "test",
"Col2" : .
}
]これが有効なJSON構文であることに誰もが同意しているわけではないようです。 たとえば、Powershellを使用してこのファイルをJSONに読み戻すと、次のようになります。
$json = Get-Content -Path 'C:\Users\myUser\testEmpty.json' -ErrorAction Stop | ConvertFrom-Json
エラーが発生します:
ConvertFrom-Json : Invalid JSON primitive: ..
At C:\Users\myUser\testEmpty.ps1:1 char:118
+ ... \myUser\testEmpty.json' -ErrorAction Stop | ConvertFrom-Json
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [ConvertFrom-Json], ArgumentException
+ FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand
これを修正する方法はありますか? スクリプトを使用してJSONファイルを保存する場合のオプションはありますか? または、唯一の回避策は、テーブルに空の値がないことを確認することですか?
データ表スクリプティングRe:空の数値を含むテーブルをJSONとして保存すると、無効なJSONプリミティブになりますか?有効なJSONになるには、これらをnull値に変更する必要があると確信しています。
列が2つしかない場合は、データテーブルを連想配列に変換し、それをJSONに変換してみてください(注:連想配列ではキーの重複は許可されません。 有効なJSONは機能しますが、重複したキーを処理することがどれほど優れているかはわかりません)
Names Default To Here(1);
dt = New Table( "testEmpty",
Add Rows( 2 ),
New Column( "Col1",
Character,
"Nominal",
Set Selected,
Set Values( {"test", "test1"} )
),
New Column( "Col2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [., .] )
)
);
aa = Associative Array(Column(dt, "Col1"), Column(dt, "Col2"));
json = As JSON Expr(aa);これは次のようになります。
"{\!" test \! ":null、\!" test1 \! ":null}"
また、Save Text File( "c:\ temp \ test.json"、json)を使用して保存すると、JMPでエスケープされた引用符が削除されます{"test":null、 "test1":null}