JSON <=> JMPTodos,
Tengo una pregunta de 2 partes.
Parte 1.
Digamos que tengo un archivo JSON de este tipo:
[
{
"Cat1": {
"SubCat1": {
"Param1": "AA",
"Param2": "BB"
},
"SubCat2": {
"Param1": "AB",
"Param2": "BC"
}
},
"Cat2": {
"SubCat1": {
"Param1": "BA",
"Param2": "BC"
},
"SubCat2": {
"Param1": "CB",
"Param2": "BD"
}
}
}
]¿Cómo lo importaría a JMP (usando GUI o scripts) para obtener algo como esto?

Hasta ahora solo obtengo un montón de columnas y una fila.
Parte 2.
Ahora necesito convertir la tabla JMP a un archivo JSON. Digamos que tengo un archivo JMP que se parece a arriba. El simple hecho de guardarlo como JSON conduciría a esto:
[
{
"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"
}
]Lo cual no es bueno.
Pero si construyo un AA que se ve así y lo guardo como 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)luego obtengo JSON que necesito.
Pregunta: ¿cuál es la forma más eficiente de construir AA así a partir de una tabla JMP así?
¡Gracias!
Tabla de datosOtroScriptingRe: JSON <=> JMPHola,
A primera vista, su archivo JSON original no incluye ningún encabezado de columna, lo que confunde la rutina de importación JMP JSON. Solo un pensamiento.
Mejor,
TS
Re: JSON <=> JMPSupongo que debería usar nombres genéricos como "Columna1", o si se hace a través de la GUI, solo tiene la opción de ingresarlo.
Creo que debería tener una opción para decir: todo desde el nivel 1 va a esta columna, todo desde el nivel 2 va a esa columna, y así sucesivamente ...
Re: JSON <=> JMPrespuesta de la parte 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(); La tabla de importación tiene los datos, en una fila, pero codificados en los nombres de las columnas. Después de la transposición, use la función word () en una fórmula de columna para dividir el nombre con puntos en 3 columnas. Elimine la fórmula para que se pueda eliminar la columna de la etiqueta, ya que ahora es redundante.
transpuesto y columnizado
Re: JSON <=> JMPparte 2, usando dt2 de la parte 1. Para cada fila, cree la clave + AA si aún no se ha creado, luego agregue la clave del siguiente nivel. Esto mantendrá la última aparición de una fila duplicada.
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 <=> JMPComo @Thierry_S señaló, el formato JSON está utilizando datos en vez de nombres para llaves Su ejemplo de guardado en json preferido de JMP usa la columna nombres por las llaves
Los formatos JSON de Pandas pueden exprimir parte de la redundancia, y JMP puede leerlos (pero no escribirlos directamente). @Audrey_Shull )