Wie kann ich überprüfen, ob ein json-Schlüssel existiert in Postgres?
Sagen wir, ich habe eine json sieht wie folgt aus:
some_json = {'key_a': {'nested_key': 'a'},
'key_b': {'nested_key': 'b'}}
Beachten Sie, dass key_a
und key_b
sind optional Tasten zugeordnet Wörterbücher und möglicherweise oder möglicherweise nicht vorhanden.
Ich habe eine Funktion, die prüft, ob ein äußerer key " existiert in some_json
und gibt einen booleschen Wert zurück.
CREATE FUNCTION key_exists(some_json json, outer_key text)
RETURNS boolean AS $$
BEGIN
RETURN (some_json->outer_key IS NULL);
END;
$$ LANGUAGE plpgsql;
Bekomme ich die folgende Fehlermeldung:
ProgrammingError: operator does not exist: json -> boolean
Warum ist outer_key
was eine boolean ist? Was ist die korrekte syntax, um diese überprüfung durchzuführen?
- Json ist der Typ
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Funktion bewirkt das genaue Gegenteil von dem, was der name ist, aber die Art, wie zu beheben Ihre Funktion ist das hinzufügen
(
und)
rund um diesome_json->outer_key
.Hier ist es voll funktionsfähig und passend zum Namen Ihrer Funktion (beachten Sie die
NOT
vor derNULL
).Einige tests:
Und hier, wenn ein Schlüssel nicht existiert:
Können Sie auch die'? ' - operator so:
Und wenn Sie benötigen, um die Abfrage von verschachtelten Schlüssel verwenden, wie diese:
Sehen http://www.postgresql.org/docs/9.5/static/functions-json.html
HINWEIS: Nur für
jsonb
geben.??
statt?
.Überprüfen Schlüssel vorhanden ist oder nicht, kann man mit dem operator -> das wird verwendet, um Get JSON-Objekt Feld von Schlüssel
Zum Beispiel:
Können Sie auch die suchen-Taste über operator #> und #>>
Bekommen JSON-Objekt-Feld als text: '{"a":1,"b":2}'::json->>', b' durch die Verwendung der operator ->>