/ / स्तंभों के नामों के बिना पंक्तियों से बिल्डिंग JSON - सरणियाँ, जंक्शन, पोस्टग्रेज़ल, पोस्टग्रैस्कल-9.3

कॉलम नामों के बिना पोस्टग्रेस पंक्तियों से JSON का निर्माण - सरणी, जेसन, postgresql, postgresql-9.3

मेरे पास एक 3 colum PostgreSQL 9.4.4 tbl है जहाँ k: TEXT, UNIQUE, v: INT, t: अगला।

k      v      t
----------------
k1     3      x
k6     5      x
k11    3      y
k3     2      z
k4     2      y
k7     1      x
..     .      .

मैं 3 जेएसएन सरणियों को स्वतः उत्पन्न करने की कोशिश कर रहा हूं, जो अलग-अलग हैं:

1. [{"k1":3},{"k6":5},{"k7":1}] (WHERE t=x)
2. [{"k11":3},{"k4":2}] (WHERE t=y)
3. [{"k3":2}] (WHERE t=z)

प्रशन:

  1. प्रथम,

JSON_BUILD_OBJECT का चयन करें (k, v) tbl से

मुझे व्यक्तिगत json तत्व देता है {"k1": 3}, {"k6": 5}, आदि। मैं अपने ऐप में (गो में) फुल जसन ऐरे बना सकता हूं, लेकिन यह हैकी है। मैं पूर्ण [{"k1": 3}, {"k6": 5}, {"k7": 1}] कैसे प्राप्त करूं?

SELECT array_to_json (array_agg (row_to_json (tx))) FROM (SELECT k, v FROM tbl) tx;

मुझे कॉलम नाम देता है, जो मुझे नहीं चाहिए: [{"k": "k1", "v": ३}, {"k": "k6", "v": ५} आदि। मुझे जरूरत है [{"k1": ३}, {"k6": 5}, आदि

  1. इसके अलावा,

JSON_BUILD_OBJECT का चयन करें (k, v) tbl से जहां t = x;

त्रुटियों इसलिए मैं टी पर टी फिल्टर कर सकते हैं। मैं "ग्रुप वांट नहीं" चाहता हूं, मैं 3 अलग-अलग पासों को अलग-अलग जेनरेट करना चाहता हूं, 3 अलग-अलग पासों पर, जहां डब्ल्यू = टी के मूल्य पर निर्भर करता है। IOW, I don’t t [["y": [{"k11" : 3}, {"k4": 2}], आदि

मैं Postgres 9 में json ops के लिए नया हूं।4, मैं "डीबी में स्ट्रिंग हेरफेर के साथ गड़बड़ करने के बजाए ठीक से जसन प्राप्त करना पसंद करता हूं। मैं यहां क्या देख रहा हूं? किसी भी मदद की सराहना की जाएगी।

उत्तर:

जवाब के लिए 2 № 1
with s (k,v,t) as ( values
("k1",3,"x"),
("k6",5,"x"),
("k11",3,"y"),
("k3",2,"z"),
("k4",2,"y"),
("k7",1,"x")
)
select t, array_to_json(array_agg(json_build_object(k,v)))
from s
where t = "y"
group by t