Access911.net   |   a9BBS   |   OTaA System  
  搜索文章︰  
Access911歡迎您光臨  
   主頁      上傳      简体版       論壇     
設為首頁  |  加入收藏   
  
你現在的位置︰文章索引 -> 文章分類 -> C#/.Net  
 首頁|  近日更新|  下載  |  文章索引  |  搜索|  朮語|  承接工程|  
 
系統正在加載內容,請耐心等待...
 
 查詢
 窗体
 報表
 
 
 VBA
 函數
 ADO/DAO/ADO.NET
 API
 ADP
 安全
 發布
 OA
 ASP/ASP.NET
 其他語言
 控件
 DELPHI
 C#/.Net
 本站
 其他
 小例程
 常用軟件
 參考文檔
 業主作品
 网友大作
 
 
友情鏈接
 access911.net
 
訪問人次
 1701840
 
站長 E-Mail
 net911@sina.com
 access911@gmail.com
 
RSS 訂閱

顯示附加信息 >>>

如何用js遍歷json對象生成用于post提交的url字串?序列化JSON

作者︰cg1  摘自︰access911.net  ︰cg1  更新日期︰2012-11-2  瀏覽人次︰

 

問題︰

如何用js遍歷json對象生成用于post提交的url字串?序列化JSON《C#/.Net》
jQuery.Form中可以直接用Serialize將Form中所有的input序列化為可以用于URL GET 或者 POST 的字符串,類似 &a=1&b=2 這樣的字符串。
如何讓 json 對象序列化為類似的字符串呢?

 


回答︰

json對象包含的層次可能非常多,因此直接序列化可能有點問題,主要是name可能有很多重复。可以用添加前綴的方式避免部分。或者干脆只取最終節點的數據。JS 代碼如下︰



//遍歷對象,帶級別前綴的。每個層次的前綴用英文逗號分隔。
function ergodicJson(obj, prefix) {
    var s = ""
    for (var itm in obj) {
        if (obj[itm] instanceof Array == true) {
            //是數組
            s += "&" + prefix + itm + "_count=" + obj[itm].length
            for (var i = 0; i < obj[itm].length; i++) {
                if (obj[itm][i] instanceof Array == true) {
                    s += ergodicJson(obj[itm][i], prefix + itm + ",");
                } else if (obj[itm][i] instanceof Object == true) {
                    s += ergodicJson(obj[itm][i], prefix + itm + ",");
                } else {
                    s += "&" + prefix + itm + "," + encodeURI(obj[itm][i]) + "=" + encodeURI(obj[itm][i]);
                }
                //s += ergodicJson(obj[itm][i]);
            }
        } else if (obj[itm] instanceof Object == true) {
            //是json對象。

            s += ergodicJson(obj[itm], prefix + itm + ",");
        }
        else {
            //是簡單數值   
            s += "&" + prefix + encodeURI(itm) + "=" + encodeURI(obj[itm]);
        }
    }
    return s;
}


//只遍歷最終項目,如果最終項目沒有屬性名,則以其值為屬性名
function ergodicJson2(obj) {
    var s = ""
    for (var itm in obj) {
        if (obj[itm] instanceof Array == true) {
            //是數組
            s += "&" + itm + "_count=" + obj[itm].length
            for (var i = 0; i < obj[itm].length; i++) {
                if (obj[itm][i] instanceof Array == true) {
                    s += ergodicJson2(obj[itm][i]);
                } else if (obj[itm][i] instanceof Object == true) {
                    s += ergodicJson2(obj[itm][i]);
                } else {
                    s += "&" + encodeURI(obj[itm][i]) + "=" + encodeURI(obj[itm][i]);
                }
            }
        } else if (obj[itm] instanceof Object == true) {
            //是json對象。
            s += ergodicJson2(obj[itm]);
        }
        else {
            //是簡單數值   
            s += "&" + encodeURI(itm) + "=" + encodeURI(obj[itm]);
        }
    }
    return s;
}


調用示例︰
function runtest7() {
    var json =
        { a: "dasdf",
            b: 451,
            d: ["a", "b", "c"],
            e: [
                { e1: "dfa", e2: "dfasdf" },
                { e3: "sdfasdf", e4: "sdfasdf" },
                { e5: { e51: "dfasdf", e52: "sdfasd"} },
                { e6: ["sd", 23, "dfa"], e7: [{ e71: "sadfasdf" },
                                { e72: "sdfasd" }
                            ]
                }
            ]
        };

        var s = ergodicJson(json, ""); // "&a=dasdf&b=451&d_count=3&d,a=a&d,b=b&d,c=c&e_count=4&e,e1=dfa&e,e2=dfasdf&e,e3=sdfasdf&e,e4=sdfasdf&e,e5,e51=dfasdf&e,e5,e52=sdfasd&e,e6_count=3&e,e6,sd=sd&e,e6,23=23&e,e6,dfa=dfa&e,e7_count=2&e,e7,e71=sadfasdf&e,e7,e72=sdfasd"    
        var bs = ergodicJson2(json);     //"&a=dasdf&b=451&d_count=3&a=a&b=b&c=c&e_count=4&e1=dfa&e2=dfasdf&e3=sdfasdf&e4=sdfasdf&e51=dfasdf&e52=sdfasd&e6_count=3&sd=sd&23=23&dfa=dfa&e7_count=2&e71=sadfasdf&e72=sdfasd"    String
        var b = s;
}


 


本站文章旨在為該問題提供解決思路及關鍵性代碼,并不能完成應該由网友自己完成的所有工作,請网友在仔細看文章并理解思路的基礎上舉一反三、靈活運用。

access911.net 原創文章,作者本人對文章保留一切權利。
如需轉載必須征得作者同意并注明本站鏈接

 

 
相關文章
     沒有手動相關文章
 
評論
     查看或發表更多的評論,請單擊這里。
 
 
 
 
 
   
  Access911.net   |   a9BBS   |   OTaA System   |
建站日期︰2000年4月2日  |  設計施工︰陳格 ( access911 & cg1 )
 Copyright © 2000 - 2003 COMET, 陳格 保留所有權利