Bei der Verwendung von SQLite können wir die folgenden Methoden verwenden, um Daten aus einem JSON-Dokument zu extrahieren.
Der json_extract()
Funktion
Wie der Name schon sagt, ist der json_extract()
Funktion extrahiert und gibt einen oder mehrere Werte aus wohlgeformtem JSON zurück.
Beispiel:
SELECT json_extract('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs[1]'
);
Ergebnis:
{"name":"Bark","scores":[3,4,8,7]}
Arrays sind nullbasiert, daher beginnt die Zählung bei 0
. Daher haben wir [1][code> angegeben um das zweite Element innerhalb der
dogs
zu erhalten Array, das zufällig ein JSON-Objekt ist.
Wir können nur den Namen des Hundes an dieser Position im Array zurückgeben, indem wir zu unserem Pfad hinzufügen:
SELECT json_extract('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs[1].name'
);
Ergebnis:
Bark
Wir können json_extract()
verwenden um mehrere Pfade zurückzugeben:
SELECT json_extract('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs[0].name',
'$.dogs[1].name',
'$.dogs[2].name'
);
Ergebnis:
["Wag","Bark","Woof"]
Wenn wir Werte aus mehreren Pfaden extrahieren, werden die Werte in einem Array zurückgegeben.
Der ->
Betreiber
Der ->
-Operator extrahiert eine Unterkomponente aus einem JSON-Dokument und gibt eine JSON-Darstellung dieser Unterkomponente zurück.
Daher können wir das erste Beispiel wie folgt ändern:
SELECT '{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}' -> '$.dogs[1]';
Ergebnis:
{"name":"Bark","scores":[3,4,8,7]}
Der ->
Operator unterscheidet sich geringfügig von json_extract()
Funktion:
- Der
->
-Operator gibt immer eine JSON-Darstellung der Unterkomponente zurück. - Der
json_extract()
Die Funktion gibt JSON nur zurück, wenn zwei oder mehr Pfadargumente vorhanden sind (da das Ergebnis dann ein JSON-Array ist) oder wenn das einzelne Pfadargument auf ein Array oder Objekt verweist. - Wenn es nur ein Pfadargument gibt und dieser Pfad auf eine JSON-Null oder einen String oder einen numerischen Wert verweist, dann
json_extract()
gibt den entsprechenden SQL-NULL-, TEXT-, INTEGER- oder REAL-Wert zurück.
Daher passiert Folgendes, wenn wir den Namen eines Hundes aus unserem JSON extrahieren:
SELECT '{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}' -> '$.dogs[1].name';
Ergebnis:
"Bark"
Diesmal ist es von Anführungszeichen umgeben. Das liegt daran, dass es eine JSON-Darstellung des Werts zurückgegeben hat. Als wir denselben Wert mit json_extract()
extrahiert haben zuvor haben wir eine SQL-Darstellung des Werts erhalten.
Wir können aber auch den ->>
verwenden Operator, um eine SQL-Darstellung zurückzugeben.
Der ->>
Betreiber
Der ->>
Operator funktioniert genauso wie ->
-Operator, außer dass ->>
gibt eine SQL-Darstellung der angegebenen Unterkomponente zurück. Insbesondere gibt es einen SQL TEXT
zurück , INTEGER
, ECHT
, oder NULL
Wert, der die ausgewählte Unterkomponente darstellt, oder NULL
wenn die Unterkomponente nicht existiert.
Daher passiert Folgendes, wenn wir ->>
verwenden Operator, um den Namen des Hundes zu extrahieren:
SELECT '{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}' ->> '$.dogs[1].name';
Ergebnis:
Bark
Es wird nicht mehr in Anführungszeichen gesetzt.