JSON <=> JMP全て、
2 つの質問があります。
パート1。
この種の JSON ファイルがあるとします。
[
{
"Cat1": {
"SubCat1": {
"Param1": "AA",
"Param2": "BB"
},
"SubCat2": {
"Param1": "AB",
"Param2": "BC"
}
},
"Cat2": {
"SubCat1": {
"Param1": "BA",
"Param2": "BC"
},
"SubCat2": {
"Param1": "CB",
"Param2": "BD"
}
}
}
]次のようなものを取得するには、(GUIまたはスクリプトを使用して)JMPにインポートするにはどうすればよいですか:

これまでのところ、たくさんの列と 1 つの行を取得しています。
パート2。
ここで、JMP テーブルを JSON ファイルに変換する必要があります。 上記のような JMP ファイルがあるとします。 JSONとして単純に保存すると、次のようになります。
[
{
"Category" : "Cat1",
"SubCategory" : "SubCat1",
"Parameter" : "Param1",
"Value" : "AA"
},
{
"Category" : "Cat1",
"SubCategory" : "SubCat1",
"Parameter" : "Param2",
"Value" : "BB"
},
{
"Category" : "Cat1",
"SubCategory" : "SubCat2",
"Parameter" : "Param1",
"Value" : "AB"
},
{
"Category" : "Cat1",
"SubCategory" : "SubCat2",
"Parameter" : "Param2",
"Value" : "BC"
},
{
"Category" : "Cat2",
"SubCategory" : "SubCat1",
"Parameter" : "Param1",
"Value" : "BA"
},
{
"Category" : "Cat2",
"SubCategory" : "SubCat1",
"Parameter" : "Param2",
"Value" : "BC"
},
{
"Category" : "Cat2",
"SubCategory" : "SubCat2",
"Parameter" : "Param1",
"Value" : "CB"
},
{
"Category" : "Cat2",
"SubCategory" : "SubCat2",
"Parameter" : "Param2",
"Value" : "BD"
}
]これは良くありません。
しかし、次のような AA を作成して JSON として保存すると、次のようになります。
AA = [
"Cat1"=> [
"SubCat1"=> [
"Param1"=> "AA",
"Param2"=> "BB"
],
"SubCat2"=> [
"Param1"=> "AB",
"Param2"=> "BC"
]
],
"Cat2"=> [
"SubCat1"=> [
"Param1"=> "BA",
"Param2"=> "BC"
],
"SubCat2"=> [
"Param1"=> "CB",
"Param2"=> "BD"
]
]
];
JSON = As JSON Expr(AA);
Save Text File("C:\Users\MyUser\JMPtoJSON\AAtoJSON.json", JSON)次に、必要な JSON を取得します。
質問 - そのような JMP テーブルからそのような AA を構築する最も効率的な方法は何ですか?
ありがとう!
データ表他のスクリプティングRe: JSON <=> JMPありがとう、クレイグ、
私が使用するための良いヒント
!Contains()
各列の AA の作成を開始し、その特定のレベルの一意の値を取得するためのキーを取得してそれらを反復処理したため、複雑になりすぎました。 あなたの方法ははるかに簡単です。
Re: JSON <=> JMPとして@ティエリー_Sご指摘のとおり、JSON形式はデータそれよりも名前キー用。 JMPの優先するjsonへの保存の例では、列を使用しています名前キーのために。
Pandas JSON 形式は冗長性の一部を絞り出すことができ、JMP はそれらを読み取ることができます (ただし、直接書き込むことはできません。 @Audrey_Shull )
Re: JSON <=> JMPパート 2、パート 1 の dt2 を使用。 行ごとに、キー + AA がまだ作成されていない場合は作成し、次のレベルのキーを追加します。 これにより、重複した行の最後の発生が保持されます。
result = [=> ];
For( i = 1, i <= N Rows( dt2 ), i += 1,
If( !Contains( result, dt2:category[i] ),
result[dt2:category[i]] = [=> ]
);
If( !Contains( result[dt2:category[i]], dt2:SubCategory[i] ),
result[dt2:category[i]][dt2:SubCategory[i]] = [=> ]
);
result[dt2:category[i]][dt2:SubCategory[i]][dt2:Parameter[i]] = dt2:value[i];
);
Write( As JSON Expr( result ) );
{
"猫1":
{
"SubCat1":{"Param1":"AA","Param2":"BB"},
"SubCat2":{"Param1":"AB","Param2":"BC"}
}、
"猫2":
{
"SubCat1":{"Param1":"BA","Param2":"BC"},
"SubCat2":{"Param1":"CB","Param2":"BD"}
}
}
Re: JSON <=> JMPパート1の答え
dt1 = Open(
Char To Blob(
"\[[
{
"Cat1": {
"SubCat1": {
"Param1": "AA",
"Param2": "BB"
},
"SubCat2": {
"Param1": "AB",
"Param2": "BC"
}
},
"Cat2": {
"SubCat1": {
"Param1": "BA",
"Param2": "BC"
},
"SubCat2": {
"Param1": "CB",
"Param2": "BD"
}
}
}
]]\"
),
json
);
dt2 = dt1 << Transpose( columns( dt1 << getcolumnnames ) ); // the 8 columns become the 8 rows
name = {"category", "SubCategory", "Parameter"}; // add these new column names
For( i = 1, i <= nitems(name), i += 1,
nc = dt2 << New Column( name[i], formula( Word( i, label, "." ) ) );
dt2 << runformulas; // run,
nc << deleteformula(); // and remove so label is no longer referenced
);
// pretty it up...
dt2:row1 << setname( "value" );
dt2 << deletecolumns( label ); // unreferenced now, and not needed
// move value to end if desired...
dt2:value << setselected; dt2 << move selected columns( to last ); dt2 << Clear Column Selection(); インポート テーブルにはデータが 1 行に含まれていますが、列名にエンコードされています。 転置後、列式で word() 関数を使用して、ドット付きの名前を 3 つの列に分割します。 式を削除して、ラベル列が冗長になったため削除できるようにします。
transposed and column-ized転置および列化
Re: JSON <=> JMP「Column1」のような一般的な名前を使用する必要があると思います。または、GUI を介して行う場合は、それを入力するオプションがあります。
言うオプションが必要だと思います-レベル1からのすべてがこの列に行き、レベル2からのすべてがその列に行きます...
Re: JSON <=> JMPやあ、
一見すると、元の JSON ファイルには、JMP JSON インポート ルーチンを混乱させる列ヘッダーが含まれていません。 ちょっとした考え。
一番、
TS