JavaScript中將JSONArray文字內容轉JSON物件陣列

曹化宇發表於2017-12-09

年底了,冒個泡,娛樂一下。寫個JavaScript函式,其功能是將JSONArray文字內容轉換為JSONObject物件陣列,程式碼如下:

// 字串轉換為包含JSONObject的陣列
function string2JsonArray(s) {
    // [的位置
    var sBeginIndex = s.indexOf("[");
    // ]的位置
    var sEndIndex = s.indexOf("]");
    if (sBeginIndex == -1 || sEndIndex == -1) return null;
    // 最後逗號方便統一處理
    var jastr = s.substring(sBeginIndex + 1, sEndIndex).trim() + ",";
    var sArr = jastr.split("{");  // sArr第一個成員為空
    //
    var joCount = sArr.length - 1;
    var result = new Array(joCount);
    for (var i = 0; i < joCount; i++) {
        // 最後,號的位置
        var cIndex = sArr[i + 1].lastIndexOf(",");
        result[i] = JSON.parse("{" + sArr[i + 1].substring(0, cIndex));
    }
    //
    return result;
}

大家可以看到,這裡使用了最最原始、最最粗獷的方法,通過字串相關的一系列函式來處理文字內容。

第一步是做簡單的格式檢測,找到[和]符號的索引位置,它們是JSONArray文字的開始和結束符號。

第二步是通過[和]符號的索引值來擷取其中的一系列JSONObject文字內容,並在最後加一個逗號,其目的是方便稍後的統一處理。

第三步,將一系列的JSONObject內容通過{符號分割為陣列(sArr),sArr陣列中的第一個成員應該為空,而JSONObject內容是從第二個成員開始,只是前面少了{符號,最後多了個逗號。

最後,通過迴圈對sArr成員進行處理,在其前面加{符號,刪除最後的逗號,這樣就變成了可用的JSONObject文字內容,通過JSON.parse()函式可以將文字轉換為JSON物件。

下面的程式碼是對此函式的測試。

var sJsonArray = "[{\"Name\": \"Tom\",\"Sex\": \"1\"},{\"Name\": \"Jerry\",\"Sex\": \"1\"},{\"Name\": \"Mary\",\"Sex\": \"2\"}]";
    var arrJsonObject = string2JsonArray(sJsonArray);
    alert(arrJsonObject[1].Name); // Jerry

程式碼會顯示Jerry。

相關文章