在處理 JSON 數據時,一個很重要的概念是括號深度。括號深度指的是 JSON 中花括號和方括號的嵌套層數,可以用于檢查 JSON 格式的正確性、分析 JSON 數據結構等。
// 示例 JSON 數據 { "name": "小明", "age": 20, "hobbies": ["basketball", "music"], "friends": [ { "name": "小紅", "age": 21 }, { "name": "小強", "age": 19, "hobbies": ["reading"] } ] }
對于上面的 JSON 數據,我們可以按照以下方式計算括號深度:
{ // 深度為 1 "name": "小明", "age": 20, "hobbies": [ // 深度為 2 "basketball", "music" ], "friends": [ // 深度為 2 { "name": "小紅", "age": 21 }, { // 深度為 2 "name": "小強", "age": 19, "hobbies": [ // 深度為 3 "reading" ] } ] }
可以看出,每遇到一個左括號,括號深度就加一;每遇到一個右括號,括號深度就減一。在遍歷 JSON 數據時,可以通過棧來實現括號深度的計算。
function calcJsonDepth(json) { let depth = 0; let stack = []; for (let i = 0; i < json.length; i++) { let c = json.charAt(i); if (c === "{" || c === "[") { depth++; stack.push(c); } else if (c === "}" || c === "]") { depth--; stack.pop(); } } if (stack.length > 0) { throw new Error("JSON 格式非法!"); } return depth; }
上面的代碼實現了一個計算 JSON 括號深度的函數。它遍歷 JSON 字符串中的每個字符,如果是左括號就加深度并把左括號壓入棧中,如果是右括號就減深度并彈出棧中的左括號。最后,如果棧不為空,說明 JSON 格式非法。
在使用 JSON 數據時,通過計算括號深度可以方便地驗證其格式的正確性,并根據括號深度分析 JSON 數據的結構。