/**
* 在物件和字串之間進行轉換。
*
* @param {Object|string} data 要轉換的資料。
* @param {boolean} [stringify=false] 如果為 true,則將物件轉換為字串。如果為 false 或未定義,則將字串轉換為物件。
* @returns {Object|string|null} 轉換後的資料,如果轉換失敗則返回 null。
*/
function convertBetweenObjectAndString(data, stringify = false) {
if (stringify) {
// 物件轉字串
try {
return JSON.stringify(data);
} catch (error) {
console.error("物件轉字串失敗:", error);
return null;
}
} else {
// 字串轉物件
try {
if (typeof data === 'string' && data.trim() !== '') { // 處理空字串情況
return JSON.parse(data);
} else if (data === null || typeof data === 'undefined' || (typeof data === 'string' && data.trim() === '')) {
return null; // 或返回 {} 取決於你的需求,空字串是返回null還是空物件
} else {
return data; // 如果不是字串,直接返回原始資料
}
} catch (error) {
console.error("字串轉物件失敗:", error);
return null;
}
}
}
// 示例用法:
// 物件轉字串
const myObject = { name: "John Doe", age: 30 };
const jsonString = convertBetweenObjectAndString(myObject, true);
console.log(jsonString); // 輸出: '{"name":"John Doe","age":30}'
// 字串轉物件
const jsonString2 = '{"name":"Jane Doe","age":25}';
const myObject2 = convertBetweenObjectAndString(jsonString2);
console.log(myObject2); // 輸出: {name: 'Jane Doe', age: 25}
// 處理錯誤情況
const invalidJsonString = '{"name":"Invalid JSON'; // 無效的 JSON 字串
const parsedObject = convertBetweenObjectAndString(invalidJsonString);
console.log(parsedObject); // 輸出: null
// 處理空字串
const emptyString = "";
const parsedObject2 = convertBetweenObjectAndString(emptyString);
console.log(parsedObject2); // 輸出: null
// 非字串情況
const num = 123;
const resultNum = convertBetweenObjectAndString(num);
console.log(resultNum); // 輸出: 123
const nullValue = null;
const resultNull = convertBetweenObjectAndString(nullValue);
console.log(resultNull); // 輸出: null
這個改進的版本包含以下增強功能:
- 錯誤處理: 使用
try...catch
塊來捕獲JSON.parse
和JSON.stringify
中的潛在錯誤,並在發生錯誤時返回null
並列印錯誤訊息到控制檯。 - 空字串處理: 增加了對空字串的處理,防止
JSON.parse
報錯。根據你的需求,你可以選擇返回null
或{}
。 - 非字串輸入的處理: 如果輸入不是字串型別,則直接返回原始輸入,避免不必要的處理和潛在的錯誤。
- 更清晰的註釋和示例: 新增了更詳細的註釋來解釋函式的功能和用法,並提供了更全面的示例來演示如何處理各種情況,包括有效和無效的 JSON 字串、空字串、以及非字串輸入。
這個版本更加健壯,可以處理各種邊緣情況,並提供更好的錯誤處理,使其更適合在生產環境中使用。