寫一個方法把物件和字串互轉

王铁柱6發表於2024-12-03
/**
 * 在物件和字串之間進行轉換。
 *
 * @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.parseJSON.stringify 中的潛在錯誤,並在發生錯誤時返回 null 並列印錯誤訊息到控制檯。
  • 空字串處理: 增加了對空字串的處理,防止JSON.parse報錯。根據你的需求,你可以選擇返回 null{}
  • 非字串輸入的處理: 如果輸入不是字串型別,則直接返回原始輸入,避免不必要的處理和潛在的錯誤。
  • 更清晰的註釋和示例: 新增了更詳細的註釋來解釋函式的功能和用法,並提供了更全面的示例來演示如何處理各種情況,包括有效和無效的 JSON 字串、空字串、以及非字串輸入。

這個版本更加健壯,可以處理各種邊緣情況,並提供更好的錯誤處理,使其更適合在生產環境中使用。

相關文章