PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

Postgres में पुनरावर्ती JSON कुंजी एकत्र करें

चाल json_typeof . का उपयोग करके कुछ अंतिम स्थिति परीक्षण जोड़ने की है सही जगह पर।

आपको jsonb . का भी उपयोग करना चाहिए अगर आपको ऑब्जेक्ट कुंजी ऑर्डर की परवाह नहीं है।

यहाँ मेरा काम करने का माहौल है:

CREATE TABLE test (
  id  SERIAL PRIMARY KEY,
  doc JSON
);

INSERT INTO test (doc) VALUES ('{
 "files": {
  "folder": {
   "file1": {
    "property": "blah"
   },
   "file2": {
    "property": "blah"
   },
   "file3": {
    "property": "blah"
   },
   "file4": {
    "property": "blah",
    "prop" : {
      "clap": "clap"
    }
   }
 }
},
"software": {
  "apt": {
    "package1": {
        "version": 1.2
    },
    "package2": {
        "version": 1.2
    },
    "package3": {
        "version": 1.2
    },
    "package4": {
        "version": 1.2
    }
  }
 }
}');

जब दूसरी क्वेरी किसी भी पंक्ति को वापस नहीं करती है तो रिकर्सन रोक दिया जाता है। यह एक खाली वस्तु को json_each . पर पास करके किया जाता है ।

 WITH RECURSIVE doc_key_and_value_recursive(key, value) AS (
  SELECT
    t.key,
    t.value
  FROM test, json_each(test.doc) AS t

  UNION ALL

  SELECT
    t.key,
    t.value
  FROM doc_key_and_value_recursive,
    json_each(CASE 
      WHEN json_typeof(doc_key_and_value_recursive.value) <> 'object' THEN '{}' :: JSON
      ELSE doc_key_and_value_recursive.value
    END) AS t
)
SELECT *
FROM doc_key_and_value_recursive
WHERE json_typeof(doc_key_and_value_recursive.value) <> 'object';


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ArrayField के अंदर Django JSONField

  2. PostgreSQL में मूविंग एवरेज की गणना कैसे करें

  3. मैं अगली चयन अभिव्यक्ति में कॉलम उपनाम का उपयोग क्यों नहीं कर सकता?

  4. PgBouncer में नया क्या है 1.6

  5. PostgreSQL में LISTAGG (Oracle डेटाबेस) के बराबर क्या है?