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.