目標格式 {["environment":"正常"],["video":"正常"],...} 不是合法 JSON。JSON 只有兩種合法頂層結構:
{"key": "value", ...} —— 無序鍵值對集合[{"key": "value"}, ...] —— 有序值序列// 原始二維數組
var sourceArray = [
["environment", "正常"],
["video", "正常"],
["edfa", "正常"],
["servers", "正常"],
["network", "正常"],
["other", "正常"]
];
var resultObject = {};
for (var i = 0; i < sourceArray.length; i++) {
var pair = sourceArray[i];
if (pair.length >= 2) {
resultObject[pair[0]] = pair[1];
}
}
// 結果:
// {
// "environment": "正常",
// "video": "正常",
// "edfa": "正常",
// "servers": "正常",
// "network": "正常",
// "other": "正常"
// }
var resultArray = [];
for (var i = 0; i < sourceArray.length; i++) {
var pair = sourceArray[i];
if (pair.length >= 2) {
var obj = {};
obj[pair[0]] = pair[1];
resultArray.push(obj);
}
}
// 結果:
// [
// {"environment": "正常"},
// {"video": "正常"},
// {"edfa": "正常"},
// {"servers": "正常"},
// {"network": "正常"},
// {"other": "正常"}
// ]
var resultMap = new Map();
for (var i = 0; i < sourceArray.length; i++) {
var pair = sourceArray[i];
if (pair.length >= 2) {
resultMap.set(pair[0], pair[1]);
}
}
// 使用:resultMap.get('environment') → "正常"
// 序列化:JSON.stringify([...resultMap]) → 目標二格式
/**
* 二維數組轉標準 JSON
* @param {Array} arr - [[key, value], ...]
* @param {string} mode - 'object' | 'array' | 'map'
* @returns {Object|Array|Map}
*/
function convert2DArrayToJSON(arr, mode = 'object') {
if (!Array.isArray(arr)) throw new TypeError('輸入必須是數組');
switch (mode) {
case 'object':
return arr.reduce((obj, pair) => {
if (Array.isArray(pair) && pair.length >= 2) {
obj[pair[0]] = pair[1];
}
return obj;
}, {});
case 'array':
return arr.reduce((arr, pair) => {
if (Array.isArray(pair) && pair.length >= 2) {
var obj = {};
obj[pair[0]] = pair[1];
arr.push(obj);
}
return arr;
}, []);
case 'map':
var map = new Map();
arr.forEach(pair => {
if (Array.isArray(pair) && pair.length >= 2) {
map.set(pair[0], pair[1]);
}
});
return map;
default:
throw new Error('不支持的模式: ' + mode);
}
}
// 使用示例
var objResult = convert2DArrayToJSON(sourceArray, 'object');
var arrResult = convert2DArrayToJSON(sourceArray, 'array');
console.log(JSON.stringify(objResult, null, 2));
console.log(JSON.stringify(arrResult, null, 2));
// Spring MVC 接收
@PostMapping("/convert")
public ResponseEntity> convert(@RequestBody List> sourceArray) {
// 轉為 Map
Map result = sourceArray.stream()
.filter(pair -> pair != null && pair.size() >= 2)
.collect(Collectors.toMap(
pair -> pair.get(0),
pair -> pair.get(1),
(v1, v2) -> v1 // 重複鍵保留首個
));
return ResponseEntity.ok(result);
}
// Jackson 序列化輸出
// {"environment":"正常","video":"正常",...}
| 錯誤做法 | 問題 | 正確理解 |
|---|---|---|
想生成 {[...],[...]} | 語法錯誤,大括號內只能是鍵值對 | 用對象 {...} 或數組 [{...},{...}] |
| 鍵重複時期望保留所有 | 對象鍵唯一,後者覆蓋前者 | 用數組模式 [{k:v},{k:v}] 保留重複 |
直接 JSON.stringify(sourceArray) | 輸出 [["k","v"],["k","v"]] 非標準對象 | 需先轉換結構再序列化 |