年底了,冒个泡,娱乐一下。写个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。