JSON

将字符串转化为Json

字号+ 作者:H5之家 来源:H5之家 2017-02-27 13:02 我要评论( )

将字符串转化为Json

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" /> </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;

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评