欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » Html » 正文

热门阅读

JavaScript开发技术(四)-JSON格式学习

创建时间:2012年05月10日 11:32  阅读次数:(4310)
分享到:

五、JSON


1.基本格式:
对象是属性、值对的集合。一个对象的开始于“{”,结束于“}”。每一个属性名和值间用“:”提示,属性间用“,”分隔。 

数组是有顺序的值的集合。一个数组开始于"[",结束于"]",值之间用","分隔。值可以是引号里的字符串、数字、true、false、null,也可以是对象或数组。这些结构都能嵌套。
例:
var user = {
    UserName: "admin",
    UserPassword: "adminPass",
    "IsManager": 1,
    EmployeeName: {FirstName:"kang",LastName:"jianmin"},
    RoleList:["Public","SysAdmin"]
};

2.访问方式:
(1)点表示法
例:user.UserName

(2)使用属性名
例:user[“UserName”]

3.将字符串转为JSON对象
(1)eval
例:
var userString = "{UserName:\"test\"}";
eval("var userJSON = "+userString);//或var userJSON = eval("(" + userString + ")");
alert(userJSON.UserName);
(2)Function
function strToJson(str) {
    return (new Function("return " + str))();
}
var userString = "{UserName:\"test\"}";
var userJSON = strToJson(userString);
alert(userJSON.UserName);

4.JSON转字符串
var data = { host: { url: "ad.market.com", page: [{ name: "all", area: [{ name: "rightbanner", tname: "all", tclass: "none", type: "jpg", ad: [{ url: "abc.gif", width: "", height: "", menu: "red", tran: "", href: "http://music.qq.com", alt: "aaaaaaaaa", target: "_blank", top: "", bottom: "", left: "", right: ""}] }, { name: "leftbanner", tname: "all", tclass: "none", type: "jpg", ad: [{ url: "", width: "", height: "", menu: "red", tran: "", href: "http://music.qq.com", alt: "aaaaaaaaa", target: "_blank", top: "", bottom: "", left: "", right: ""}]}] }, { name: "index.htm", area: [{ name: "rightbanner", tname: "index.htm", tclass: "none", type: "swf", ad: [{ url: "abcdef.swf", width: "", height: "", menu: "red", tran: "", href: "http://music.qq.com", alt: "aaaaaaaaa", target: "_blank", top: "", bottom: "", left: "", right: ""}] }, { name: "leftbanner", tname: "index.htm", tclass: "none", type: "text", ad: [{ url: "", width: "", height: "", menu: "red", tran: "", href: "http://music.qq.com", alt: "aaaaaaaaa", target: "_blank", top: "", bottom: "", left: "", right: "" }, { url: "", width: "", height: "", menu: "red", tran: "", href: "http://music.qq.com", alt: "aaaaaaaaa", target: "_blank", top: "", bottom: "", left: "", right: "" }, { url: "", width: "", height: "", menu: "red", tran: "", href: "http://music.qq.com", alt: "aaaaaaaaa", target: "_blank", top: "", bottom: "", left: "", right: ""}]}]}] }, toString: function() { return obj2str(this) } }

function obj2str(o) {
    var r = [];
    if (typeof o == "string") return "\"" + o.replace(/([\'\"\\])/g, "\\$1").replace(/(\n)/g, "\\n").replace(/(\r)/g, "\\r").replace(/(\t)/g, "\\t") + "\"";
    if (typeof o == "object") {
        if (!o.sort) {
            for (var i in o)
                r.push(i + ":" + obj2str(o[i]));
            if (!!document.all && !/^\n?function\s*toString\(\)\s*\{\n?\s*\[native code\]\n?\s*\}\n?\s*$/.test(o.toString)) {
                r.push("toString:" + o.toString.toString());
            }
            r = "{" + r.join() + "}"
        } else {
            for (var i = 0; i < o.length; i++)
                r.push(obj2str(o[i]))
            r = "[" + r.join() + "]"
        }
        return r;
    }
    return o.toString();
}
alert(obj2str(data))

5.DataTable转JSON字符串
public static string DataTable2JSONString(DataTable dt)
{
    StringBuilder jSONString = new StringBuilder();
    if(dt.Rows.Count <= 0 || dt.Columns.Count <= 0)
    {
        return "";
    }
    jSONString.Append("[");
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        jSONString.Append("{");
        for (int j = 0; j < dt.Columns.Count - 1; j++)
        {
            jSONString.Append(dt.Columns[j].ColumnName + ":\"" + dt.Rows[i][j].ToString() + "\",");
        }
        jSONString.Append(dt.Columns[dt.Columns.Count - 1].ColumnName + ":\"" + dt.Rows[i][dt.Columns.Count - 1].ToString() + "\"");
        if (i == dt.Rows.Count - 1)
        {
            jSONString.Append("}");
        }
        else
        {
            jSONString.Append("},");
        }
    }
    jSONString.Append("]");

    return jSONString.ToString();
}

6. XML 与 JSON 之间的重要特征区别
特征 XML JSON
数据类型 不提供任何数据类型概念。必须依靠 XML 架构来添加类型信息。 提供标量数据类型,并能够通过数组和对象表示结构化数据。
数组支持 必须按照惯例表示数组,例如通过使用外部占位符元素,将数组内容模型化为内部元素。通常,外部元素使用内部元素所用名称的复数形式。 本机数组支持
对象支持 必须按照惯例表示对象,通常通过混合使用属性和元素。 本机对象支持
null 支持 需要对 XML 实例文档中的元素使用 xsi:nil,加上导入对应的命名空间。 在本机识别 null 值。
注释 本机支持,通常通过 API 来提供。 不支持。
命名空间 支持命名空间,消除了组合文档时的名称冲突风险。命名空间还允许对现有基于 XML 的标准进行安全地扩展。 无命名空间概念。通常通过嵌套对象或在对象成员名称中使用前缀(实际操作中以前者优先),来避免命名冲突。
格式设置决定 复杂。需要更多精力来决定如何将应用程序类型映射到 XML 元素和属性。会引起热烈争论,讨论以元素为中心还是以属性为中心的方法更好。 简单。为应用程序数据提供更直接的映射。唯一例外是缺少日期/时间文字。
大小 文档有些冗长,尤其在使用以元素为中心的方法来设置格式时。 语法非常简洁,产生的格式化文本中的大部分空间(理所当然)由所代表的数据使用。
在 JavaScript 中分析 需要 XML DOM 实现和其他应用程序代码,将文本映射回 JavaScript 对象。 不需要其他应用程序代码便能够分析文本,可以使用 JavaScript 的 eval 函数。
学习曲线 通常需要同时使用多种技术:XPath、XML 架构、XSLT、XML 命名空间、DOM 等。 非常简单的技术层次,为具有 JavaScript 或其他动态编程语言背景的开发人员所熟悉。

XML 与 JSON 之间的支持区别
支持 XML JSON
工具 具备由众多业界供应商广泛提供的一组成熟工具。 尚不具备丰富的工具支持,如编辑器和格式化程序。
Microsoft .NET Framework .NET Framework 1.0 之后的版本具有非常优秀和成熟的支持。XML 支持作为基类库 (BCL) 的一部分来提供。对于非托管环境,MSXML 可发挥用武之地。 目前尚无此功能,作为 ASP.NET AJAX 一部分的最初实现除外。
平台和语言 以众多平台和语言(商业和开源实现)提供了各种广泛使用的分析器和格式化程序。 在众多平台上以多种语言提供了分析程序和格式化程序。有关完整的参考资料,请查询 json.org。目前的大多数实现都可能是开源项目。
集成语言 业界供应商当前正在试验语言内的“字面”支持。有关详细信息,请参见 Microsoft 的 LINQ 项目。 仅在 JavaScript/ECMAScript 中提供本机支持。
0
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 8+56=? 的结果(结果是:64)
结  果: