序列化
本頁說明節點樹如何輸出成 JSON:節點層的 json getter、根層的 editor.json 與 editor.export(),以及兩條根層路徑的差異。
節點層:JSONEditorNode.json
JSONEditorNode.json(getter)遞迴呼叫私有的 #json()(JSONEditorNode.js:157),依節點型別回傳 JavaScript 值:
| 節點型別 | 回傳 |
|---|---|
array |
子節點 #json() 結果組成的陣列 |
object |
以子節點 key 為鍵的物件 |
boolean |
value.toLowerCase() === "true" |
number |
Number(value) |
| 其他 | value 原值 |
object 節點組物件時,沒有 key 的子節點會被略過;例外是該 object 節點本身位於陣列中(this.parent.type === "array"),此時無鍵子節點以目前已收集的鍵數作為數字鍵(JSONEditorNode.js:170)。同名的 key 後者覆蓋前者。
根層:editor.json 與 editor.export()
根層的兩條路徑篩選條件不同:
| 路徑 | 篩選條件(JSONEditor.js) |
輸出 |
|---|---|---|
editor.json(getter,第 267-277 行) |
只收 e.key 為真的子節點 |
4 空格縮排的 JSON 字串 |
editor.export()(第 289-310 行) |
收 e.key 為真,或 children.length === 1 時也收 |
下載檔案 NanoJSON-{timestamp}.json,同樣 4 空格縮排 |
兩條路徑都以物件作為根,無鍵子節點寫入時使用鍵 0(result[e.key || 0])。
匯入陣列時的差異
根節點的 editor.type 固定為 "object",匯入的資料若是陣列,根層子節點會是無鍵節點,兩條路徑的結果因此不同:
| 匯入資料 | editor.json |
editor.export() 下載內容 |
|---|---|---|
[1] |
"{}" |
{"0": 1} |
[1, 2] |
"{}" |
{} |
{"a": 1} |
{"a": 1} |
{"a": 1} |
根層陣列不會以陣列形式輸出。需要保留陣列根時,請在傳入前包一層物件(例如 { "items": [...] })。
延伸閱讀
- 各型別的輸入與轉換規則:型別系統
json/export()的成員簽章:API 參考:實例成員