首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

JSON 核心語法與 JavaScript 解析全攻略:數據類型、示例、三種解析方式對比

     編輯:Java 綜合教學

JSON 核心語法與 JavaScript 解析全攻略:數據類型、示例、三種解析方式對比

JSON (JavaScript Object Notation) 是現代 Web 數據交換的事實標準。本文系統梳理 JSON 語法規則、支持的數據類型、完整示例,並深度對比 JavaScript 中 eval、JSON.parse、$.parseJSON 三種解析方式的優劣與安全性。

一、JSON 語法核心規則

  • 數據以 名稱/值對 形式:"key": value
  • 對象用 大括號 {} 包裹,多對用逗號分隔
  • 數組用 方括號 [] 包裹,值用逗號分隔
  • 字符串 必須雙引號,單引號非法
  • 無註釋、無尾隨逗號

二、支持的數據類型

三、完整示例:圖書集合

{
  "book": [
    {
      "id": "01",
      "language": "Java",
      "edition": "third",
      "author": "Herbert Schildt"
    },
    {
      "id": "07",
      "language": "C++",
      "edition": "second",
      "author": "E.Balagurusamy"
    }
  ]
}

四、JavaScript 三種解析方式深度對比

1. eval() —— 強大但危險

function strToJson(str) {
    return eval('(' + str + ')'); // 必須加括號將對象字面量轉為表達式
}

優點:支持 JS 完整語法 (函數、正則、單引號、尾隨逗號)。
致命缺點:任意代碼執行風險,若字符串來自不可信源 (用戶輸入、第三方 API),可導致 XSS 攻擊。嚴禁用於生產環境解析外部數據。

2. JSON.parse() —— 標準、安全、嚴格

function strToJson(str) {
    return JSON.parse(str);
}

優點:原生瀏覽器支持 (IE8+),嚴格遵循 RFC 8259,無代碼執行風險,性能最優。
限制:要求嚴格合法 JSON — 屬性名必須雙引號、無尾隨逗號、無註釋、無單引號字符串。違規直接拋 SyntaxError。

3. $.parseJSON() (jQuery) —— 兼容性封裝

function strToJson(str) {
    return $.parseJSON(str); // 內部調用 JSON.parse 或兼容性 polyfill
}

特點:jQuery 1.4.1+ 引入,早期為兼容無原生 JSON.parse 的舊瀏覽器;現代版本直接代理 JSON.parse。行為與 JSON.parse 一致,同樣要求嚴格合法 JSON。

五、對比總結表

類型說明示例
Number雙精度浮點 (無長整型區分)123, 3.14, -10, 1e5
String雙引號包裹,支持 Unicode 轉義"hello", "\u4e2d\u6587"
Booleantrue / falsetrue
Array有序值序列[1, "two", true, null]
Object無序鍵值對集合{"id": 1, "name": "Tom"}
null空值null
維度eval()JSON.parse()$.parseJSON()
安全性極低 (代碼注入)高 (純數據解析)高
語法寬容度高 (全 JS 語法)零 (嚴格 RFC)零
性能低 (編譯執行)最高 (原生優化)高 (代理原生)
適用場景受信任的動態代碼執行所有生產環境 JSON 解析jQuery 專案統一風格
推薦等級⭐ (禁用於數據解析)⭐⭐⭐⭐⭐ (首選)⭐⭐⭐⭐ (次選)

六、最佳實踐建議

  1. 生產環境唯一推薦 JSON.parse(),或封裝統一異常處理:try { return JSON.parse(str); } catch (e) { logError(str); return null; }
  2. 後端生成 JSON 必須保證合法性:使用成熟庫 (Jackson、Gson、Fastjson) 序列化,手動拼接 JSON 字符串極易出錯。
  3. 若需解析類 JSON (帶註釋、單引號),使用專用庫如 json5、comment-json,切勿用 eval。
  4. 傳輸大數據時考慮流式解析 (Jackson JsonParser、Gson.stream) 避免 OOM。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved