¿Guardar una tabla con valores numéricos vacíos como JSON da como resultado una primitiva JSON no válida?Si guarda una tabla con valores vacíos en una de las columnas numéricas como esta:
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( [., .] )
)
)como un archivo JSON, resultará en esto:
[
{
"Col1" : "test",
"Col2" : .
},
{
"Col1" : "test",
"Col2" : .
}
]Parece que no todo el mundo está de acuerdo en que esta es una sintaxis JSON válida. Si leo este archivo en JSON usando, digamos, Powershell:
$json = Get-Content -Path 'C:\Users\myUser\testEmpty.json' -ErrorAction Stop | ConvertFrom-Json
saldrá error:
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
¿Algúna idea de cómo arreglar esto? ¿Alguna opción al guardar archivos JSON usando scripts? ¿O la única solución es asegurarse de que la tabla no tenga valores vacíos?
Tabla de datosScriptingRe: ¿Guardar una tabla con valores numéricos vacíos como JSON da como resultado una primitiva JSON no válida?Estoy bastante seguro de que tendrían que cambiarse a valores nulos para que sean JSON válidos.
Si solo tiene dos columnas, puede intentar convertir la tabla de datos en una matriz asociativa y eso en JSON (NOTA: Associative Array no permitirá claves duplicadas. JSON válido lo hace, pero no estoy seguro de lo bueno que sería trabajar con claves duplicadas)
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);Esto se vería así:
"{\!" prueba \! ": nulo, \!" prueba1 \! ": nulo}"
y si lo guarda con Guardar archivo de texto ("c: \ temp \ test.json", json), eliminará las comillas de escape de JMP {"test": null, "test1": null}
Re: ¿Guardar una tabla con valores numéricos vacíos como JSON da como resultado una primitiva JSON no válida?Es bueno saberlo para los casos en los que de hecho tengo dos columnas, aunque en mi caso particular tengo muchas columnas.
Acabo de cambiar la columna a Carácter y si no hay ningún número, pongo "NA" y me ocupo de eso fuera de JSL más tarde.