跳至內容
Astera Technology

段落報表為何連內部詳情物件也算一段?

本例只計直接子項,須選該層遍歷。

下載完整個案資料及參考答案 ↓

準備報表輸入

本例要求 sections 為陣列,只數直接物件項,第一段內的 details 不是另一段。json_tree 遞迴查後代,json_each 在 sections 路徑只訪直接子項。

以下記錄及報表規則均為原創假設。在新 SQLite 測試資料庫重做建表,預覽包含此小型例子每張表。

假設輸入:documents
編號原 JSON 文字
A{"sections":[{"title":"First","details":{"memo":"x"}},{"title":"Second"}]}
下載可編輯 CSV ↓
完整建表及插入假設資料
CREATE TABLE documents(id TEXT PRIMARY KEY,payload TEXT NOT NULL CHECK(json_valid(payload)) CHECK(json_type(payload,'$.sections') IS 'array')); INSERT INTO documents VALUES('A','{"sections":[{"title":"First","details":{"memo":"x"}},{"title":"Second"}]}');

比較錯誤及更正結果

錯誤 SELECT:重現問題
SELECT d.id,(SELECT COUNT(*) FROM json_tree(d.payload,'$.sections') WHERE type='object') AS sections FROM documents d ORDER BY d.id;
錯誤查詢的逐行結果
編號直接段落數
A3
下載可編輯 CSV ↓
更正 SELECT
SELECT d.id,(SELECT COUNT(*) FROM json_each(d.payload,'$.sections') WHERE type='object') AS sections FROM documents d ORDER BY d.id;
更正查詢的逐行結果
編號直接段落數
A2
下載可編輯 CSV ↓

遞迴物件數三,直接段落兩。每文件用純量相關計數,sections 空時文件也仍顯示。

用新副本測邊界

清單改 [],同一文件更正段數變零。

另開新資料庫重做原建表,才套下列改動及更正查詢。空結果在表內用已標明空結果文字表示,不是假資料行。

邊界改動及更正查詢
UPDATE documents SET payload='{"sections":[]}' WHERE id='A';
SELECT d.id,(SELECT COUNT(*) FROM json_each(d.payload,'$.sections') WHERE type='object') AS sections FROM documents d ORDER BY d.id;
邊界查詢的逐行結果
編號直接段落數
A0
下載可編輯 CSV ↓

details 物件會增加直接段數嗎?

查看參考答案

不會,屬第一段內部,原直接數仍兩,空清單才零。

相關資源