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

JSP 中解析 AJAX 傳遞的 JSON 數組為 JavaScript 數組

     編輯:程式設計綜合問答

場景

後端通過 AJAX 返回字符串格式的數組數據:
[['技術評審1','專家2','供應商3','評分4','1'], ['技術評審2','專家2','供應商3','總分4','2'], ...]
前端需解析為 JavaScript 二維數組 var datas = [...]。

問題:直接返回類數組字符串非標準 JSON

原返回格式使用單引號、無鍵名,**不是合法 JSON**,JSON.parse() 會報錯,eval() 雖能執行但**極不安全** (XSS 風險)。

最佳實踐:後端返回標準 JSON 對象數組

後端 (Java) 構建 List 並序列化為 JSON:


List> list = new ArrayList<>();
for (DataItem item : dataItems) {
    Map map = new HashMap<>();
    map.put("categoryName", item.getCategoryName());
    map.put("professName", item.getProfessName());
    map.put("suppilerName", item.getSuppilerName());
    map.put("showName", item.getShowName());
    map.put("sumScore", item.getSumScore());
    list.add(map);
}
// 使用 Jackson/Gson/Fastjson 序列化
String json = objectMapper.writeValueAsString(list);
// 返回給前端 (設置 Content-Type: application/json;charset=UTF-8)
response.getWriter().write(json);

返回合法 JSON:


[
  {"categoryName":"技術評審1","professName":"專家2","suppilerName":"供應商3","showName":"評分4","sumScore":1},
  {"categoryName":"技術評審2","professName":"專家2","suppilerName":"供應商3","showName":"總分4","sumScore":2}
]

前端解析 (jQuery AJAX)


$.post(url, params, function(data) {
    // data 已自動解析為 JS 對象數組 (因 Content-Type: application/json)
    // 或手動: var json = JSON.parse(data); // 若返回純文本
    
    var arrs = []; // 目標二維數組
    for (var i = 0; i < data.length; i++) {
        var obj = data[i];
        var row = [
            obj.categoryName,
            obj.professName,
            obj.suppilerName,
            obj.showName,
            obj.sumScore
        ];
        arrs.push(row);
    }
    // arrs 即為所需格式
    console.log(arrs);
}, "json"); // 指定 dataType 為 json,jQuery 自動解析

關鍵點總結

環節錯誤做法正確做法
後端格式拼接類數組字符串 (單引號、無鍵)序列化 List / List 為標準 JSON
前端解析eval() / 手動 split/replacejQuery dataType:"json" 或 JSON.parse()
安全性極低 (代碼注入風險)高 (純數據交換)
可維護性差 (格式耦合、易斷)好 (結構化、字段可擴展)

避免手動拼接 JSON 的工具

  • Java: Jackson (Spring Boot 默認)、Gson、Fastjson (注意版本安全)。
  • 前端: 原生 JSON.stringify/parse、jQuery $.parseJSON (內部調用原生)。

總結

**後端返回標準 JSON 對象數組,前端指定 dataType:"json" 自動解析**,再按需轉換為二維數組。拒絕手動拼接字符串、拒絕 eval(),這是前後端分離開發的基本職業素養。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved