zoukankan      html  css  js  c++  java
  • JSon 对象转字符的一些方法

     引用System.Web.Entity.dll

    public static string ToJSON(this object obj)
    {
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    return serializer.Serialize(obj);
    }

     这几天在做移动后台服务,由于移动端的流量比较小,所以需要尽量的减小传输的数据包的大小,开始用的传XML,由于webservice生成的XML会自带很多东西,这样无疑是没有必要的,经讨论,最后换成用Json传输数据。

      既然是在.Net框架中用Json序列化,这里必然会用到Json.NET,当然,如果有闲心的话可以将对象构造成Json的格式。网上有很多Json.NET dll文件下载。

      http://json.codeplex.com/Release/ProjectReleases.aspx

      类库下载后,第一步就是引用,这里不多说,接下来是如何使用这个东西。

      序列化的话,我们会用到Newtonsoft.Json.JsonConvert.SerializeObject(Object obj)这个东西,只要将对象传入方法就可以得到相应的Json语句。

      很简单,这里贴一个在网上找的泛型的序列化方法。

    /// <summary>
            /// JSON序列化
            /// </summary>
            public static string JsonSerializer<T>(T t)
            {
                DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
                MemoryStream ms = new MemoryStream();
                ser.WriteObject(ms, t);
                string jsonString = Encoding.UTF8.GetString(ms.ToArray());
                ms.Close();
                return jsonString;
            }
    
            /// <summary>
            /// JSON反序列化
            /// </summary>
            public static T JsonDeserialize<T>(string jsonString)
            {
                DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
                MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
                T obj = (T)ser.ReadObject(ms);
                return obj;
            }

    ==========================================

    将后台程序(如php)发送过来的json数据转化为javascript的数组或者对象的方法十分简单,代码如下:

    1 // 假设后台发送的json数据为 '{a:2,b:1}' 存储于str中
    2 var data = eval( '(' + str + ')' );

    然而想将一个javascript对象转化为json格式的字符串却并不那么简单,特别是对象的属性值递归包含一个对象时(如 var obj={a:[2,3],b:{m:[3,4],n:2} } ),那么有没有什么方法将obj转化为json格式的字符串呢?

    当然你可以自己写一个函数,递归遍历一个对象并将其转化为json格式的字符串,对于大部分人来说这有些困难并容易出错。幸好已经有人做好了这件事情,你只用包含一段javascript代码即可。

    json2.js

    使用方法:

    01 <!doctype html>
    02 <html>
    03 <body>
    04 <script src="json2.js"></script>
    05 <script>
    06 var obj={a:[2,3],b:{m:[3,4],n:2} };
    07 var jsonStr = JSON.stringify( obj );
    08 alert(jsonStr);
    09 //将显示 {"a":[2,3],"b":{"m":[3,4],"n":2}}
    10 </script>
    11 </body>
    12 </html>

    假如有两个变量,我要将a转换成字符串,将b转换成JSON对象:

    1 var a={"name":"tom","sex":"男","age":"24"};
    2 var b='{"name":"Mike","sex":"女","age":"29"}';

    在Firefox,chrome,opera,safari,ie9,ie8等高级浏览器直接可以用JSON对象的stringify()和parse()方法。JSON.stringify(obj)将JSON转为字符串。JSON.parse(string)将字符串转为JSON格式;

    上面的转换可以这么写:

    1 var a={"name":"tom","sex":"男","age":"24"};
    2 var b='{"name":"Mike","sex":"女","age":"29"}';
    3 var aToStr=JSON.stringify(a);
    4 var bToObj=JSON.parse(b);
    5 alert(typeof(aToStr)); //string
    6 alert(typeof(bToObj)); //object

    JSON.stringify()

    ie8(兼容模式),ie7和ie6没有JSON对象,不过http://www.json.org/提供了一个json.js,这样ie8(兼容模式),ie7和ie6就可以支持JSON对象以及其stringify()和parse()方法;你可以在https://github.com/douglascrockford/JSON-js上获取到这个js,一般现在用json2.js。ie8(兼容模式),ie7和ie6可以使用eval()将字符串转为JSON对象:

    1 var c='{"name":"Mike","sex":"女","age":"29"}';
    2 var cToObj=eval("("+c+")");
    3 alert(typeof(cToObj));

    jQuery中也有将字符串转为JSON格式的方法jQuery.parseJSON( json ),接受一个标准格式的 JSON 字符串,并返回解析后的 JavaScript (JSON)对象。当然如果有兴趣可以自己封装一个jQuery扩展,jQuery.stringifyJSON(obj)将JSON转为字符串。

    JSON.stringify(jsonobj),本来是最简便的方法,可是存在浏览器兼容问题(仅适用于IE8+,Chrome 1+,FF 3+)。下面再介绍一个方法:

    01 var O2String = function (O) {
    02 //return JSON.stringify(jsonobj);
    03  
    04 var S = [];
    05 var J = "";
    06 if (Object.prototype.toString.apply(O) === '[object Array]') {
    07 for (var i = 0; i < O.length; i++)
    08 S.push(O2String(O[i]));
    09 J = '[' + S.join(',') + ']';
    10 }
    11 else if (Object.prototype.toString.apply(O) === '[object Date]') {
    12 J = "new Date(" + O.getTime() + ")";
    13 }
    14 else if (Object.prototype.toString.apply(O) === '[object RegExp]' || Object.prototype.toString.apply(O) === '[object Function]') {
    15 J = O.toString();
    16 }
    17 else if (Object.prototype.toString.apply(O) === '[object Object]') {
    18 for (var i in O) {
    19 O[i] = typeof (O[i]) == 'string' ? '"' + O[i] + '"' : (typeof (O[i]) === 'object' ? O2String(O[i]) : O[i]);
    20 S.push(i + ':' + O[i]);
    21 }
    22 J = '{' + S.join(',') + '}';
    23 }
    24  
    25 return J;
    26 };

    使用方法也很简单:

    01 var jsonStr = O2String(
    02 [
    03 {
    04 "Page": "plan",
    05 "Custom":
    06 [
    07 {
    08 "ItemName": "CustomLabel1",
    09 "ItemContent": 1,
    10 "IsItem": true,
    11 "ItemDate": new Date(1320774905467),
    12 "ItemReg": /[w]*?/gi,
    13 "ItemFunc": function () { alert("ItemFunc"); }
    14 },
    15 {
    16 "ItemName": "CustomLabel1",
    17 "ItemContent": 1,
    18 "IsItem": true,
    19 "ItemDate": new Date(1320774905467),
    20 "ItemReg": /[w]*?/gi,
    21 "ItemFunc": function () { alert("ItemFunc"); }
    22 }
    23 ]
    24 },
    25 {
    26 "Page": "project",
    27 "Custom":
    28 [
    29 {
    30 "ItemName": "CustomLabel2",
    31 "ItemContent": 2,
    32 "IsItem": false,
    33 "ItemDate": new Date(1320774905467),
    34 "ItemReg": /[w]*?/gi,
    35 "ItemFunc": function () { alert("ItemFunc"); }
    36 },
    37 {
    38 "ItemName": "CustomLabel2",
    39 "ItemContent": 2,
    40 "IsItem": false,
    41 "ItemDate": new Date(1320774905467),
    42 "ItemReg": /[w]*?/gi,
    43 "ItemFunc": function () { alert("ItemFunc"); }
    44 }
    45 ]
    46 }
    47 ]
    48 );
    49 alert(jsonStr);
    50 var jsonObj = eval("(" + jsonStr + ")");
    51 alert(jsonObj.length);
     

    转载随意,但请带上本文地址:

    http://www.nowamagic.net/librarys/veda/detail/374

  • 相关阅读:
    宿主机无法访问CentOS7上Jenkins服务的解决办法
    415. Add Strings
    367. Valid Perfect Square
    326. Power of Three
    258. Add Digits
    231. Power of Two
    204. Count Primes
    202. Happy Number
    172. Factorial Trailing Zeroes
    171. Excel Sheet Column Number
  • 原文地址:https://www.cnblogs.com/dare/p/3362815.html
Copyright © 2011-2022 走看看