आपको ये त्रुटियां मिल रही हैं इसका कारण यह है कि मूल जेसन ऑब्जेक्ट अपने इनपुट में से एक के रूप में परिणाम सेट की अपेक्षा नहीं कर रहा है, आपको {नाम, स्ट्रिंग} आदि जैसे साधारण ऑब्जेक्ट जोड़े की आवश्यकता है बग रिपोर्ट - भविष्य की कार्यक्षमता में उपलब्ध हो सकती है ... इसका सीधा सा मतलब है कि आपको अपने बहु-पंक्ति परिणामों को अल्पविराम से अलग किए गए परिणामों के संयोजन में बदलने और फिर एक जोंस सरणी में बदलने की आवश्यकता है।
आपके पास यह आपके दूसरे उदाहरण के साथ लगभग था।
GROUP_CONCAT फ़ंक्शन के साथ आप वह हासिल कर सकते हैं जो आप चाहते हैं
select json_object(
'id',p.id
,'desc',p.`desc`
,'child_objects',json_array(
(select GROUP_CONCAT(
json_object('id',id,'parent_id',parent_id,'desc',`desc`)
)
from child_table
where parent_id = p.id))
)
from parent_table p;
यह लगभग काम करता है, यह सबक्वेरी को एक स्ट्रिंग के रूप में मानता है जो वहां से बचने वाले पात्रों को छोड़ देता है।
'{\"id\": 1,
\"desc\": \"parent row 1\",
\"child_objects\":
[\"
{\\\"id\\\": 1,
\\\"desc\\\": \\\"child row 1\\\",
\\\"parent_id\\\": 1
},
{\\\"id\\\": 2,
\\\"desc\\\": \\\"child row 2\\\",
\\\"parent_id\\\": 1}\"
]
}'
इसे उचित प्रारूप में काम करने के लिए, आपको JSON आउटपुट बनाने के तरीके को निम्नानुसार बदलना होगा:
select json_object(
'id',p.id
,'desc',p.`desc`
,'child_objects',(select CAST(CONCAT('[',
GROUP_CONCAT(
JSON_OBJECT(
'id',id,'parent_id',parent_id,'desc',`desc`)),
']')
AS JSON) from child_table where parent_id = p.id)
) from parent_table p;
यह आपको सटीक परिणाम देगा जिसकी आपको आवश्यकता है:
'{\"id\": 1,
\"desc\": \"parent row 1\",
\"child_objects\":
[{\"id\": 1,
\"desc\": \"child row 1\",
\"parent_id\": 1
},
{\"id\": 2,
\"desc\": \"child row 2\",
\"parent_id\": 1
}]
}'