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やあ、
一見したところ、元のJSONファイルには、JMPJSONインポートルーチンを混乱させる列ヘッダーが含まれていません。 ちょっとした考え。
一番、
NS
Re:JSON <=> JMP「Column1」のような一般的な名前を使用する必要があると思います。または、GUIを介して実行する場合は、入力するオプションがあります。
レベル1からすべてがこの列に移動し、レベル2からすべてがその列に移動する、というように言うオプションがあるべきだと思います...
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つの列に分割します。 数式を削除して、ラベル列が冗長になったため削除できるようにします。
転置および列化
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 ) );
{{
「Cat1」:
{{
"SubCat1":{"Param1": "AA"、 "Param2": "BB"}、
"SubCat2":{"Param1": "AB"、 "Param2": "BC"}
}、
「Cat2」:
{{
"SubCat1":{"Param1": "BA"、 "Param2": "BC"}、
"SubCat2":{"Param1": "CB"、 "Param2": "BD"}
}
}
Re:JSON <=> JMPとして@Thierry_S指摘されたように、JSON形式は使用していますデータそれよりも名前キー用。 JMPで推奨されるsave-to-jsonの例では、列を使用しています名前キーのために。
パンダのJSON形式は冗長性の一部を絞り出すことができ、JMPはそれらを読み取ることができます(ただし、直接書き込むことはできません)。 @Audrey_Shull )。