JSJSON格式化詳解

一、js格式化json字符串

在 JavaScript 編程中,處理 JSON 字符串是一個常見的任務。JSON 字符串通常是從後端服務器發送過來的,有可能存在格式問題。為了更直觀地展示數據,我們需要對 JSON 字符串進行格式化。下面是一段格式化 JSON 的函數:

function formatJson(jsonStr) {
    var result = '';
    var level = 0;
    var i = 0;
    var j = 0;
    var inQuotationMarks = false;
    var currentChar = null;

    for (i = 0; i < jsonStr.length; i++) {    
        currentChar = jsonStr.charAt(i);

        switch (currentChar) {
            case '{':
            case '[':
                if (!inQuotationMarks) {
                    result += currentChar + '\n' + indent(level + 1);
                    level++;
                } else {
                    result += currentChar;
                }
                break;
            case '}':
            case ']':
                if (!inQuotationMarks) {
                    level--;
                    result += '\n' + indent(level) + currentChar;
                } else {
                    result += currentChar;
                }
                break;
            case ',':
                if (!inQuotationMarks) {
                    result += ',\n' + indent(level);
                } else {
                    result += currentChar;
                }
                break;
            case ':':
                if (!inQuotationMarks) {
                    result += ': ';
                } else {
                    result += currentChar;
                }
                break;
            case '"':
                if (i > 0 && jsonStr.charAt(i - 1) !== '\\') {
                    inQuotationMarks = !inQuotationMarks;
                }
                result += currentChar;
                break;
            default:
                result += currentChar;
                break;
        }
    }

    return result;
}

function indent(level) {
    var result = '';
    var i = 0;
    for (i = 0; i < level; i++) {
        result += '  ';
    }
    return result;
}

調用方式:

var jsonStr = '{"name":"john","age":23,"hobby":["basketball","music"],"address":{"city":"Beijing","country":"China"}}';
var formattedJsonStr = formatJson(jsonStr);
console.log(formattedJsonStr);

輸出結果:

{
  "name": "john",
  "age": 23,
  "hobby": [
    "basketball",
    "music"
  ],
  "address": {
    "city": "Beijing",
    "country": "China"
  }
}

這段代碼使用了一個棧來跟蹤層級。當遇到左花括號或左中括號時,增加層級;當遇到右花括號或右中括號時,減小層級;當遇到逗號時,新起一行,並添加縮進。我們可以將這個函數放到我們的開發工具包中,格式化所有的 JSON 字符串,讓開發調試更加方便。

二、json格式化顯示js

在前端開發中,我們需要用 JavaScript 來操作一些動態數據,有時候需要將 JavaScript 對象格式轉換為 JSON 格式,再傳給後端接口。這個過程也需要我們將 JavaScript 對象格式化成易於閱讀的格式。這個過程比較簡單,只需要使用 JSON.stringify() 函數即可:

var obj = {
    name: "john",
    age: 23,
    hobby: ["basketball", "music"],
    address: {
        city: "Beijing",
        country: "China"
    }
};
var formattedJsonStr = JSON.stringify(obj, null, 4);
console.log(formattedJsonStr);

輸出結果:

{
    "name": "john",
    "age": 23,
    "hobby": [
        "basketball",
        "music"
    ],
    "address": {
        "city": "Beijing",
        "country": "China"
    }
}

在代碼中,JSON.stringify() 函數的第一個參數是要轉換的 JavaScript 對象,第二個參數是一個函數,用於對轉換後的 JSON 字符串進行格式化。由於我們需要縮進四個空格,因此傳入了數字 4。如果不需要格式化,第二個參數可以傳入 null。

三、js格式化

在 JavaScript 開發中,我們經常需要將一些複雜的數據類型轉換為字符串進行傳輸或者存儲。為了方便數據的閱讀和編輯,我們需要將字符串格式化為易於閱讀的形式。下面是一個格式化 JavaScript 對象的函數:

function formatObj(obj) {
    var result = '';
    var level = 0;

    if (Array.isArray(obj)) {
        result += '[';
        level++;
    } else {
        result += '{';
        level++;
    }

    var keys = Object.keys(obj);
    keys.sort();

    for (var i = 0; i < keys.length; i++) {
        var key = keys[i];
        var value = obj[key];
        if (typeof value === 'object') {
            if (Array.isArray(value)) {
                result += '\n' + indent(level) + key + ': [';
                level++;
            } else {
                result += '\n' + indent(level) + key + ': {';
                level++;
            }

            result += formatObj(value);

            level--;
            result += '\n' + indent(level) + '},';
        } else {
            result += '\n' + indent(level) + key + ': ' + value + ','
        }
    }

    if (result.endsWith(',')) {
        result = result.substring(0, result.length - 1)
    }

    if (Array.isArray(obj)) {
        result += '\n' + indent(level - 1) + ']';
    } else {
        result += '\n' + indent(level - 1) + '}';
    }

    return result;
}

function indent(level) {
    var result = '';
    for (var i = 0; i < level; i++) {
        result += '  ';
    }
    return result;
}

調用方式:

var obj = {
    name: 'john',
    age: 23,
    hobby: ['basketball', 'music'],
    address: {
        city: 'Beijing',
        country: 'China'
    }
};
var formattedStr = formatObj(obj);
console.log(formattedStr);

輸出結果:

{
  "address": {
    "city": "Beijing",
    "country": "China"
  },
  "age": 23,
  "hobby": [
    "basketball",
    "music"
  ],
  "name": "john"
}

這段代碼使用了遞歸的方式,循環遍歷對象和數組的每個屬性,並將其格式化成易於閱讀的形式。同樣也可以將這個函數放到開發工具包中,方便日常調試。

四、js格式化成錢數格式

在 Web 開發中,我們經常需要將浮點數格式化為貨幣形式。下面是一個格式化為人民幣貨幣形式(例如 12345678.9 格式化成 12,345,678.90 元)的函數:

function formatMoney(num) {
    num = num.toString().replace(/\$|\,/g, '');

    if (isNaN(num)) {
        num = '0';
    }

    var sign = (num === (num = Math.abs(num)));
    num = Math.floor(num * 100 + 0.50000000001);
    var cents = num % 100;
    num = Math.floor(num / 100).toString();

    if (cents < 10) {
        cents = '0' + cents;
    }

    for (var i = 0; i < Math.floor((num.length - (i + 1)) / 3); i++) {
        num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3));
    }

    return (((sign) ? '' : '-') + '¥' + num + '.' + cents);
}

調用方式:

var num = 12345678.9;
var formattedMoney = formatMoney(num);
console.log(formattedMoney);

輸出結果:

¥12,345,678.90

這個函數使用了一個正則表達式,將字符串中的非數字字符替換為空。接着將數值乘以 100 並四捨五入,然後格式化為貨幣形式。最後添加千位分隔符和小數點。同樣可以將這個函數放到開發工具包中,方便在開發中調用。

原創文章,作者:ZPEZ,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/134567.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ZPEZ的頭像ZPEZ
上一篇 2024-10-04 00:06
下一篇 2024-10-04 00:06

相關推薦

  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性傳感器,能夠同時測量加速度和角速度。它由三個傳感器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變量讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分佈式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25

發表回復

登錄後才能評論