字串轉化為Json的多種方式

來源:互聯網
上載者:User

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;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.