sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man förhindrar "ogiltig ingångssyntax för typ json" i Postgres, när poster innehåller en blandning av json eller strängar

Om du vill hoppa över raderna med ogiltig JSON måste du först testa om texten är giltig JSON. Du kan göra detta genom att skapa en funktion som försöker analysera värdet och fånga undantaget för ogiltiga JSON-värden.

CREATE OR REPLACE FUNCTION is_json(input_text varchar) RETURNS boolean AS $$
  DECLARE
    maybe_json json;
  BEGIN
    BEGIN
      maybe_json := input_text;
    EXCEPTION WHEN others THEN
      RETURN FALSE;
    END;

    RETURN TRUE;
  END;
$$ LANGUAGE plpgsql IMMUTABLE;

När du har det kan du använda is_json funktion i ett CASE eller WHERE sats för att begränsa de giltiga värdena.

-- this can eliminate invalid values
SELECT user_data::json #> '{user,name}'
FROM users WHERE is_json(user_data);

-- or this if you want to fill will NULLs
SELECT
  CASE
    WHEN is_json(user_data)
      THEN user_data::json #> '{user,name}'
    ELSE
      NULL
  END
FROM users;


  1. Tom PHP-utdata från MySQL-databas för en longblob

  2. Hur schemalägger man en MySQL-fråga?

  3. Formatera data i Power BI Desktop Visualizations

  4. Hur man konverterar polygondata till linjesegment med PostGIS