程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 渾沌的JSON,JS Object,JS Array

渾沌的JSON,JS Object,JS Array

編輯:.NET實例教程

對於JSON,從未真正完整學習過,只是在做公司OA時,因為使用到了ExtJS,才略有耳聞。昨日,碰到一個以前從未碰到的問題,就是前台的 JSON字符串傳到後台如何解析的問題。以前都是後台的數據變成JSON字符串傳到前台由ExtJs自己解析。這回不一樣了,順序剛剛相反。由於使用的是.net 2.0的,沒有傳說中3.5自帶的JSON解析類,所以便到網上下載了個newstonsoft的JSON.Net。引入dll後,搗鼓半天沒出來我想要的結果。 我前台的返回的JSON字符串是:

[{"id":"123","home":"256","temp","240"},{"id":"254","home":"600"},{"id":"1234",temp","240"}]

  ,而我後台想要的是把它們解析成如下的SQL語句

update tableExample set home='256',temp='240' where id='123'
update tableExample set home='600' where id='254'
update tableExample set temp='240' where id='1234'

  說真的,我不知道上述的字符串算不算JSON字符串,因為我還看到過{[{"id":"123"},{"id":"123"}, {"id":"2222"}]}這樣的格式。但是我知道那個JSON字符串在JS裡其實就是個Array,而這個Array的內容就是3個JS Object:

  回過頭來,我們看看JS裡如何定義Array和Object。

  定義Array.

var  varArray=new Array();

  或者直接賦值

var varArray=new Arrau(["Apple","Pear","Orange"]) ;

  定義Object

var varObject=new Object();

  或者直接賦值

var varObject=new Object({"id":"123","home":"256","temp","240"});

  這樣看我剛剛那個JSON字符串,也可以這樣賦值給一個Array,因為它符合數組格式-用[]括起來,同時裡面的元素用字符,隔開,不是嗎?

var varArrau=new Array([{"id":"123","home":"256","temp","240"},{"id":"254","home":"600"},{"id":"1234",temp","240"}])

  這裡我們可以看出JS裡的數組裡的內容可以是任何東西,包括Object。

  那我們這樣推論JSON其實就是JS格式的Array與Object的混裝。那麼談到這裡要解決實際問題,該這麼把那串字符串變成我想要的SQL語句呢?用正則?Split拆分?

  我的天啊。那都是頭疼的事情。其實我們剛剛已經分析過了,那串JSON字符串其實就是一個數組,而數組裡放了3個Object。那我們為何不直接用JS遍歷一下這個數組,把裡面的Object取出來,再遍歷裡面的Object,把Object的屬性及值取出來呢?JS腳本如下:

    var pageDto = new String();
        var varChangeId = new Array();
        pageDto = pageDto.concat("[");
        for (var i = 0; i < updateDate.length; i++) {
            varChangeId.push(updateDate[i].data.id);
            pageDto = pageDto.concat(Ext.encode(updateDate[i].getChanges())); // GetChanges獲得修改過的字段和value
            if ((i + 1) != updateDate.length) {
                pageDto = pageDto.concat(",");
            }
        }
        pageDto = pageDto.concat("]");//這裡的pageDto就是上文提到的JSON字符串了
        var xxx = new Array();
        var varTotalSql = "";
        xxx = Ext.util.JSON.decode(pageDto);
        for (var i = 0; i < xxx.length; i++) {//第一個循環是循環3個Object
            for (m in xxx[i]) {//第二個循環是循環每個Object裡的屬性及值。
                varTotalSql += m + "='" + xxx[i][m] + "',";//屬性與值拼湊成SQL中需更新的字段
            }
            varTotalSql = varTotalSql.substring(0, varTotalSql.length - 1);// 去掉最後一個,
            varTotalSql += " where id='" + varChangeId[i] + "'$";//得到3個SQL語句,通過$號隔開。
        }


  得到的字符串在後台通過Split分割$,得到一個數組,然後循環執行更新數據庫。

  UpdateTable.ASPx.cs

        protected void Page_Load(object sender, EventArgs e)
        {   
            Response.Clear();
            SQLdal.ShellUrl Wo = new SQLdal.ShellUrl();
            string strJSon = Request.Params["testP"].ToString();
            string[] arrJson = strJSon.Split(new char[] { '},String


SplitOptions.RemoveEmptyEntrIEs);
            foreach (string i in arrJSon)
            {
                Wo.bolUpAllSql("update shell set "+i);
            }
        }


  .Net的反序列化類沒弄明白,第三方的.dll又沒整出來。只好自己用JS解析。

  當然通過$分割3個SQL語句還是有風險,萬一SQL語句裡就有$呢?解決辦法就是,在JS循環中調用AJax 執行UpdateTable.ASPx.cs ,

  當然UpdateTable.ASPx.cs 就要改動成不需要循環的。

  根基不牢,地動山搖,看著技術一天發展,我們缺沒法跟上,歎息之余,只有自我安慰:回過頭來看看《深入淺出JavaScript》,夯實基礎吧,有了基礎,一切盡在掌握。

本文作者:未知
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved