Liebe Mitglieder der Community,
Sobald wir JSON analysieren, kennt das Programm alle seine Schlüssel auf allen Ebenen. Können wir Werte rein standortbasiert extrahieren oder müssen wir die Schlüssel jedes Mal auf allen verschiedenen Ebenen abrufen?
Zum Beispiel:
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]] )
);
);
vielen Dank!
Danke @Craige_Hales
Ich habe tatsächlich ein paar Probleme mit meiner JSON-Analyse. Ich bekomme Millionen davon aus einer Datenbank, also lade ich sie alle mit SQL in eine JMP-Datentabelle herunter. Analysieren Sie sie dann einzeln, um die benötigten Informationen zu extrahieren. Ich möchte für jedes Kind eine Zeile haben und alle Informationen der Person pro Kind duplizieren.
Betrachten Sie das folgende Skript. Dies wurde manuell mit dem Assistenten erstellt. Da die Namen der Kinder in den Titeln enthalten sind, aggregiert der Assistent sie standardmäßig nicht. Wenn ich das Wort „Kind“ anstelle von „Tish“, „Mimi“ und „Berta“ wiederholen würde, würde ich es mithilfe der langen Vermutung perfekt erraten.
Wie gehe ich von da aus vor, damit dies einer beliebigen Anzahl unterschiedlicher Kinder gerecht wird, die der JSON haben könnte? Wie ändere ich die harte Codierung von Tish, Mimi und Berta? Außerdem fehlen möglicherweise einige Kinderattribute, daher müsste ich in der Lage sein, sie zu überspringen.
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 )
);
Bisher habe ich die Schlüssel auf jeder Ebene durchgegangen (Brut-Force), aber es hat über drei Tage gedauert, um eine Stichprobe von 6 Millionen JSONs durchzugehen.
Ihre Beispieldaten sind eine Python-Liste von Python-Wörterbüchern.
Mehr sehen...Python und JMP verwenden { } und [ ] mehr oder weniger umgekehrt zueinander. Der Python [] erstellt eine Liste, die durch eine Zahl indiziert ist. JMP verwendet [ ] für eine Matrix oder ein assoziatives Array. Python verwendet { }, um ein Wörterbuch zu erstellen. JMPs Äquivalent zu einem Wörterbuch ist das assoziative Array [ ]. Die Liste von JMP verwendet { }.
Die Wörterbücher werden in assoziative Arrays konvertiert und die AAs von JMP verwenden keinen solchen numerischen Index. Aber man kann ganz nah dran sein. Vor JMP 16 konnten Sie die Elemente in einem assoziativen Array mit <<
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;...
)
Das Äußere für jede weiß Es verarbeitet eine Liste und das Innere für jede weiß Es wird ein AA bearbeitet. Ich habe das erste Argument vorgebracht für jede in beiden Fällen ist es besonders kompliziert, sodass es Index1 und Index2 enthalten könnte; Möglicherweise benötigen Sie den numerischen Index nicht wirklich.
Sie haben nicht gesagt, wie Ihre Daten tatsächlich aussehen. Möglicherweise möchten Sie den JSON-Importassistenten verwenden, um ein Skript zu erstellen, um die Daten direkt in eine Datentabelle zu laden. Es könnte so einfach sein, die Best-Guess-Option zu verwenden, wenn JSON zugänglich ist.