Todos,
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!
Hola,
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
Supongo 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 ...
respuesta 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