您的位置:首页 > Web前端 > JavaScript

字符串转化为Json的多种方式

2011-09-17 00:00 771 查看
JSON是一种便于操作使用的轻量级数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。


很多时候我们需要组装字符串为json对象,首先要组合字符串,然后转换为json对象,如下面的例子:


<script type="text/javascript">
  <!--
  var a=50,b="xxx";
  var arr="{id:"+a+",name:'"+b+"'}";
  //-->
</script>


组合成了字符串arr,下一步就是转换成对象了,很快我们会想到使用eval方法,但如果这样做转换会出现错误,今日偶就这样尝试了,那该如何转换成json对象呢?郁闷许久,之后在json官网提供的json.js文件中找到了解决办法,方法如下:


在字符串两端再加上括号然后eval就ok了。测试代码如下:


<script type="text/javascript">
  <!--
  var a=50,b="xxx";
  var arr="{id:"+a+",name:'"+b+"'}";
  arr=eval('('+arr+')')
  alert(arr.name);
  //-->
</script>


上面代码执行后会弹出“xxx”,说明已经成功转换为json对象了,一个似乎很简单的问题,不过还是郁闷了半天才解决掉,还是记到blog上以加深印象,也希望能帮助遇到此问题的朋友早日解除郁闷。


下面是一个详细的运用例子:


<html>
<head>
<title>AjaxTest</title>
<script type="text/javascript">
var xmlHttp;
function createXMLHttpRequest()
{
    if(window.ActiveXObject)
    {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if(window.XMLHttpRequest)
    {
        xmlHttp = new XMLHttpRequest();
    }
}
function startRequest()
{
    createXMLHttpRequest();
    try
    {
        xmlHttp.onreadystatechange = handleStateChange;
        xmlHttp.open("GET", "json.txt", true);
        xmlHttp.send(null);
    }
    catch(exception)
    {
        alert("xmlHttp Fail");
    }
}
function handleStateChange()
{    
    if(xmlHttp.readyState == 4)
    {        
        if (xmlHttp.status == 200 || xmlHttp.status == 0)
        {
            var result = xmlHttp.responseText;
            var json = eval("(" + result + ")");
            alert(json.user);
            alert(json.sex);
        }
    }
}
</script>
</head>
<body>
    <div>
        <input type="button" value="AjaxTest" onclick="startRequest();" />
    </div>
</body>
</html>


其中json.txt为:


{
	"user":"cck",
	"sex":"name"
}


使用ajax的开发项目过程中,经常需要将json格式的字符串返回到前端,前端解析成js对象(JSON )。ECMA-262(E3) 中没有将JSON概念写到标准中,还好在 ECMA-262(E5) 中JSON的概念被正式引入了,包括全局的JSON对象和Date的toJSON方法。


1. eval方式解析,恐怕这是最早的解析方式了。如下:


function strToJson(str){
     var json = eval('(' + str + ')');
     return json;
}


记得别忘了str两旁的小括号。


2. new Function形式,比较怪异哦。如下


function strToJson(str){
    var json = (new Function("return " + str))();
    return json;
}


3. 使用全局的JSON对象,如下:


function strToJson(str){
    return JSON.parse(str);
}


目前 IE8/Firefox3.5+/Chrome4/Safari4/Opera10 已实现了该方法。


有时从数据库读出来的数据带有空格,使 eval 失效。这时只要将字符串中的空格去掉即可。


var result = xmlhttp.responseText;
text = result.replace(/\s/ig, ' ');
var json = eval('(' + text + ')');
gen3_title.innerHTML = json.title;
gen3.innerHTML = json.content;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: