Chers membres de la communauté,
une fois que nous avons analysé json, le programme connaît toutes ses clés à tous les niveaux. pouvons-nous extraire des valeurs purement basées sur l'emplacement ou devons-nous obtenir les clés à tous les différents niveaux à chaque fois ?
Par exemple:
Names Default To Here( 1 );
l = Parse JSON(
"[ { \!"name\!": \!"KATIE\!", \!"age\!": 12, \!"sex\!": \!"F\!", \!"height\!": 59, \!"weight\!": 95 }, { \!"name\!": \!"LOUISE\!", \!"age\!": 12, \!"sex\!": \!"F\!", \!"height\!": 61, \!"weight\!": 123 }, { \!"name\!": \!"JANE\!", \!"age\!": 12, \!"sex\!": \!"F\!", \!"height\!": 55, \!"weight\!": 74 } ]"
);
For( i = 1, i <= Length( l ), i++,
Show( l[i] );
); // works just fine
<BR />
For( i = 1, i <= Length( l ), i++,
Show( l[i] );
For( ii = 1, ii <= Length( l[i] ), ii++,
Show( l[i][ii] ); // not working
);
);
l[1]["age"]; // brings "12" without getting the keys of l[1]
l[1][1]; // not working - subscripted key not in map
keys = l[1] << get keys;
l[1][keys[1]]; // brings 12 works fine
For( i = 1, i <= Length( l ), i++,
keys = l[i] << get keys; // can we skip this step?
For( ii = 1, ii <= Length( keys ), ii++,
Show( l[i], l[i][keys[ii]] )
);
);
merci beaucoup!
merci @Craige_Hales
J'ai quelques problèmes avec mon analyse json en fait. Je reçois des millions d'entre eux à partir d'une base de données, donc je les télécharge tous dans une table de données jmp en utilisant sql. Ensuite, analysez-les un par un pour extraire les informations dont j'ai besoin. je voudrais avoir une ligne pour chaque enfant, et toutes les informations de la personne dupliquées par enfant.
considérez le script suivant. cela a été produit manuellement à l'aide de l'assistant. étant donné que les noms des enfants figurent dans les titres, l'assistant ne les agrège pas par défaut. si j'avais le mot "enfant" répété au lieu de tish, mimi et berta, il le devinerait parfaitement en utilisant la longue estimation.
comment puis-je partir de là pour que cela s'adapte à n'importe quel nombre d'enfants différents que le json peut avoir ? comment changer le codage en dur de tish, mimi et berta ? De plus, certains attributs d'enfants peuvent être manquants, je devrais donc pouvoir les ignorer.
JSON To Data Table(
"\[
{
"Person": "sami",
"Age": "45",
"event": "came home",
"when": 1639682643.7996492,
"Children": {
"tish": [
{
"Name": "tish",
"Father": "bob",
"Age": "14",
"event": "went to school",
"when": 1639682630.1256561
}
],
"mimi": [
{
"Name": "mimi",
"Father": "bob",
"Age": "25",
"event": "went to play",
"when": 1639682630.1256561
}
],
"berta": [
{
"Name": "berta",
"Father": "bob",
"Age": "23",
"event": "went to work",
"when": 1639682630.1256561
}
]
}
}
]\",
JSON Settings(
Stack( 0 ),
Row( "/root/Children/tish" ),
Row( "/root/Children/mimi" ),
Row( "/root/Children/berta" ),
Col(
"/root/Person",
Column Name( "Person" ),
Fill( "Use Forever" ),
Type( "Character" ),
Format( {"Best", 15} ),
Modeling Type( "Continuous" )
),
Col(
"/root/Age",
Column Name( "person Age" ),
Fill( "Use Forever" ),
Type( "Character" ),
Format( {"Best", 15} ),
Modeling Type( "Continuous" )
),
Col(
"/root/event",
Column Name( "person event" ),
Fill( "Use Forever" ),
Type( "Character" ),
Format( {"Best", 15} ),
Modeling Type( "Continuous" )
),
Col(
"/root/when",
Column Name( "person when" ),
Fill( "Use Forever" ),
Type( "Character" ),
Format( {"Best", 15} ),
Modeling Type( "Continuous" )
),
Col(
"/root/Children",
Column Name( "Children" ),
Fill( "Use Once" ),
Type( "Character" ),
Format( {"Best", 15} ),
Modeling Type( "Continuous" )
),
Col(
"/root/Children/tish/Name",
Column Name( "Name" ),
Fill( "Use Once" ),
Type( "Character" ),
Format( {"Best", 15} ),
Modeling Type( "Continuous" )
),
Col(
"/root/Children/tish/Father",
Column Name( "Father" ),
Fill( "Use Once" ),
Type( "Character" ),
Format( {"Best", 15} ),
Modeling Type( "Continuous" )
),
Col(
"/root/Children/tish/Age",
Column Name( "Age" ),
Fill( "Use Once" ),
Type( "Character" ),
Format( {"Best", 15} ),
Modeling Type( "Continuous" )
),
Col(
"/root/Children/tish/event",
Column Name( "event" ),
Fill( "Use Once" ),
Type( "Character" ),
Format( {"Best", 15} ),
Modeling Type( "Continuous" )
),
Col(
"/root/Children/tish/when",
Column Name( "when" ),
Fill( "Use Once" ),
Type( "Character" ),
Format( {"Best", 15} ),
Modeling Type( "Continuous" )
),
Col(
"/root/Children/mimi/Name",
Column Name( "Name" ),
Fill( "Use Once" ),
Type( "Character" ),
Format( {"Best", 15} ),
Modeling Type( "Continuous" )
),
Col(
"/root/Children/mimi/Father",
Column Name( "Father" ),
Fill( "Use Once" ),
Type( "Character" ),
Format( {"Best", 15} ),
Modeling Type( "Continuous" )
),
Col(
"/root/Children/mimi/Age",
Column Name( "Age" ),
Fill( "Use Once" ),
Type( "Character" ),
Format( {"Best", 15} ),
Modeling Type( "Continuous" )
),
Col(
"/root/Children/mimi/event",
Column Name( "event" ),
Fill( "Use Once" ),
Type( "Character" ),
Format( {"Best", 15} ),
Modeling Type( "Continuous" )
),
Col(
"/root/Children/mimi/when",
Column Name( "when" ),
Fill( "Use Once" ),
Type( "Character" ),
Format( {"Best", 15} ),
Modeling Type( "Continuous" )
),
Col(
"/root/Children/berta/Name",
Column Name( "Name" ),
Fill( "Use Once" ),
Type( "Character" ),
Format( {"Best", 15} ),
Modeling Type( "Continuous" )
),
Col(
"/root/Children/berta/Father",
Column Name( "Father" ),
Fill( "Use Once" ),
Type( "Character" ),
Format( {"Best", 15} ),
Modeling Type( "Continuous" )
),
Col(
"/root/Children/berta/Age",
Column Name( "Age" ),
Fill( "Use Once" ),
Type( "Character" ),
Format( {"Best", 15} ),
Modeling Type( "Continuous" )
),
Col(
"/root/Children/berta/event",
Column Name( "event" ),
Fill( "Use Once" ),
Type( "Character" ),
Format( {"Best", 15} ),
Modeling Type( "Continuous" )
),
Col(
"/root/Children/berta/when",
Column Name( "when" ),
Fill( "Use Once" ),
Type( "Character" ),
Format( {"Best", 15} ),
Modeling Type( "Continuous" )
)
),
JSON Wizard( 1 )
);
jusqu'à présent, je parcourais les touches à tous les niveaux (force brute), mais il a fallu plus de trois jours pour parcourir un échantillon de 6 millions de jsons.
Votre exemple de données est une liste Python de dictionnaires Python.
Voir plus...
Les dictionnaires sont convertis en tableaux associatifs et les AA de JMP n'utilisent pas d'indice numérique comme celui-là. Mais vous pouvez vraiment vous en approcher. Avant JMP 16, vous pouviez parcourir les éléments d'un tableau associatif en utilisant <<
jlist = Parse JSON(
"[
{ \!"name\!": \!"KATIE\!", \!"age\!": 12, \!"sex\!": \!"F\!", \!"height\!": 59, \!"weight\!": 95 },
{ \!"name\!": \!"LOUISE\!", \!"age\!": 12, \!"sex\!": \!"F\!", \!"height\!": 61, \!"weight\!": 123 },
{ \!"name\!": \!"JANE\!", \!"age\!": 12, \!"sex\!": \!"F\!", \!"height\!": 55, \!"weight\!": 74 }
]"
);
for each({record,index1}, jlist,
show(record,index1); // ... record = ["age" => 12, "height" => 55, "name" => "JANE", "sex" => "F", "weight" => 74]; index1 = 3;
for each({{key,value},index2}, record, show(key,value,index2)); // key = "age";value = 12;index2 = 1;key = "height";value = 55;index2 = 2;...
)
L'extérieur pour chaque sait il traite une liste, et l'intérieur pour chaque sait il traite un AA. J'ai fait le premier argument à pour chaque dans les deux cas, très compliqué, il pourrait donc inclure l'index1 et l'index2 ; vous n'avez peut-être pas besoin de l'index numérique.
Vous n'avez pas dit à quoi ressemblent réellement vos données. Vous pouvez utiliser l'assistant d'importation JSON pour créer un script permettant de charger les données directement dans une table de données. Cela peut être aussi simple que d'utiliser l'option de meilleure estimation si le JSON est acceptable.