2016-03-23 15 views
8

में पंक्तियों में एक जेसन सरणी कैसे चालू करें मेरे पास मेरे पोस्टग्रेज़ डेटाबेस में एक जेसन सरणी संग्रहीत है। json इस तरह दिखेगा:पोस्टग्रेस

[ 
     { 
      "operation": "U", 
      "taxCode": "1000", 
      "description": "iva description", 
      "tax": "12" 
     }, 
     { 
      "operation": "U", 
      "taxCode": "1001", 
      "description": "iva description", 
      "tax": "12" 
     }, 
     { 
      "operation": "U", 
      "taxCode": "1002", 
      "description": "iva description", 
      "tax": "12" 
     } 
    ] 

अब मैं सरणी का चयन करने के लिए इतना है कि किसी भी तत्व क्वेरी परिणाम की एक अलग पंक्ति में है की जरूरत है। तो SELECT कथन मैं प्रदर्शन इस तरह से डेटा लौटाएगा:

data 
-------------------------------------------------------------------------------------- 
{ "operation": "U", "taxCode": "1000", "description": "iva description", "tax":"12"} 
{ "operation": "U", "taxCode": "1001", "description": "iva description", "tax":"12"} 
{ "operation": "U", "taxCode": "1002", "description": "iva description", "tax":"12"} 

मैं unnest() समारोह

SELECT unnest(json_data::json) 
FROM my_table 

उपयोग करने की कोशिश, लेकिन यह jsonb प्रकार स्वीकार नहीं करता है

+2

'unnest() 'PostgreSQL के सरणी प्रकारों के लिए है। [उपयोग] (http://www.postgresql.org/docs/current/static/functions-json.html) 'json_array_elements (json) '(9.3+),' jsonb_array_elements (jsonb)' (9.4+) या 'json [बी] _array_elements_text (जेसन [बी]) '(9.4+) – pozs

+0

धन्यवाद। यदि आप सवाल पूछते हैं तो मैं इसे स्वीकार कर सकता हूं। – k4ppa

उत्तर

10

मैं मूल रूप से टिप्पणी अनुभाग में पॉज़ द्वारा लिखे गए उत्तर को पोस्ट करता हूं।

unnest() PostgreSQL के सरणी प्रकारों के लिए है।

इसके बजाय निम्नलिखित समारोह में से एक के लिए इस्तेमाल किया जा सकता है:

  • json_array_elements(json) (9.3+)
  • jsonb_array_elements(jsonb) (9.4+)
  • json[b]_array_elements_text(json[b]) (9.4+)

उदाहरण :

select * from json_array_elements('[1,true, [2,false]]') 

उत्पादन मूल्य

------------- 
| 1   | 
------------- 
| true  | 
------------- 
| [2,false] | 
------------- 

Here जहां v9.4 के लिए प्रलेखन पाया जा सकता है।

6

मेरा सुझाव है अपने मामले में json_to_recordset कमांड का उपयोग कर। आपका एसक्यूएल तो होना चाहिए:

select * from json_to_recordset('[{"operation":"U","taxCode":1000},{"operation":"U","taxCode":10001}]') as x("operation" text, "taxCode" int); 

उत्पादन होता है:

------------------------ 
| |operation|taxCode | 
------------------------ 
| 1 | "U" | 1000 | 
------------------------ 
| 2 | "U" | 10001 | 
------------------------ 

उदाहरण के कॉलम (या JSON कुंजी) स्वतंत्र रूप से और अधिक विस्तार किया जा सकता है।

+0

थैंक्स फ्लेवियो, मैंने ऐसी अच्छी टेबल बनाने का प्रबंधन नहीं किया था। – user2080851