it-swarm.com.de

Durchlaufen Sie Schlüssel / Wert-Paare eines jsonb-Objekts in der postgresql-Funktion

Ich versuche, in Postgres eine Funktion zu erstellen, die jedes Schlüssel/Wert-Paar in einem bestimmten jsonb -Objekt durchlaufen kann.

create or replace function myFunction
(input jsonb)
returns jsonb as $$
BEGIN

    // foreach(key in input)
    //       do some math operation on its corresponding value

    returns input;

END; $$

Es wird erwartet, dass die Argumenteingabe ein jsonb-Objekt ist, z. B. {"a":1, "b":2, "c":3}.

Ich möchte jedes Schlüssel/Wert-Paar im Objekt durchlaufen. Wie Sie meinem Kommentar entnehmen können, habe ich Backend-Code mit allgemeineren Programmiersprachen wie c, Java usw. geschrieben. Ich bin also nicht gut in SQL. Ich habe versucht, online zu suchen, aber sie sprechen darüber, wie man das Array jsonb anstelle des Objekts durchläuft. Also wirklich hier stecken.

3
JaneL

Verwenden Sie jsonb_each(jsonb) oder jsonb_each_text(jsonb) in einer FOR Schleife wie:

CREATE OR REPLACE FUNCTION my_function(input jsonb)
  RETURNS jsonb
  LANGUAGE plpgsql AS  -- language declaration required
$func$
DECLARE
   _key   text;
   _value text;
BEGIN
    FOR _key, _value IN
       SELECT * FROM jsonb_each_text($1)
    LOOP
       -- do some math operation on its corresponding value
       RAISE NOTICE '%: %', _key, _value;
    END LOOP;

    RETURN input;
END
$func$;

Anruf:

SELECT my_function('{"a":1, "b":2, "c":3}');

Verbunden:

Beachten Sie, dass es für viele Probleme, bei denen Benutzer Programmiersprachen wie c, Java usw. dazu neigten, eine Schleife zu verwenden, eine überlegene satzbasierte gibt Lösung in SQL um die Ecke. Codebeispiele nebeneinander:

1