準備報表輸入
本例合法物件片段以 TEXT 存。普通文字交 json_group_array,每段會變 JSON 字串;json(fragment) 才提供 JSON 值,按 id 產生物件陣列。
以下記錄及報表規則均為原創假設。在新 SQLite 測試資料庫重做建表,預覽包含此小型例子每張表。
| 編號 | 物件文字 |
|---|---|
| 1 | {"name":"A"} |
| 2 | {"name":"B"} |
CREATE TABLE fragments(id INTEGER PRIMARY KEY,fragment TEXT NOT NULL CHECK(json_valid(fragment) AND json_type(fragment)='object')); INSERT INTO fragments VALUES(1,'{"name":"A"}'),(2,'{"name":"B"}');比較錯誤及更正結果
SELECT json_group_array(fragment ORDER BY id) AS objects FROM fragments;| 物件陣列 JSON |
|---|
| ["{\"name\":\"A\"}","{\"name\":\"B\"}"] |
SELECT json_group_array(json(fragment) ORDER BY id) AS objects FROM fragments;| 物件陣列 JSON |
|---|
| [{"name":"A"},{"name":"B"}] |
錯陣列每項要再解析一次,更正已含 A、B 物件。表限制每段輸入均為合法物件。
用新副本測邊界
加第三個 {} 物件,匯出仍保留空物件項。
另開新資料庫重做原建表,才套下列改動及更正查詢。空結果在表內用已標明空結果文字表示,不是假資料行。
INSERT INTO fragments VALUES(3,'{}');
SELECT json_group_array(json(fragment) ORDER BY id) AS objects FROM fragments;| 物件陣列 JSON |
|---|
| [{"name":"A"},{"name":"B"},{}] |
更正匯出會丟空物件嗎?
查看參考答案
不會,邊界陣列有 A、B、{},都是物件而非被引號包的物件文字。