文章出自:http://www.cnblogs.com/lucas/archive/2009/04/13/1434566.html ;多谢帮我解决了问题。
书写AJAX的时候,经常需要解析从服务器返回的一串字符串,这里简单介绍服务器返回字符的两种格式,及JS对它们的解析方法。
一、JSON
即JS对象标记(JavaScript Object Notation),是一种以JS声明对象的方式组合的一串字符串。
JS可以按以下方式定义对象:
var obj = { id: 2, name: 'n' };
这样就定义了对象 obj, 它有两个公共属性id和name,可以用 obj.id 的方式直接访问其属性值。
从服务器获取数据时往往不止一个对象,这就需要用到对象数组,JS中对象数组可以用 [] 来定义,如下:
var objs = [{ id: 1, name: 'n_1' }, { id: 2, name: 'n_2'}]; alert(objs[0].id);
这样就定义了对象数组 objs, 它包含两个对象,可以用索引来访问,如 objs[0] 将引用到第一个对象。
到这里你或许已经想到服务器返回的字符串格式是怎样的,但字符串毕竟是字符串,我们需要将其转换为可以利用JS操作的变量。
这就用到 eval 函数,请看下例:
var objs = eval("[{ id: 1, name: 'n_1' }, { id: 2, name: 'n_2'}]"); alert(objs[0].id); // return 1
好了,服务器端你只要以格式:[{ id: 1, name: 'n_1' }, { id: 2, name: 'n_2'}] 返回字符串,
在客户端就可以利用 eval() 执行返回的字符串,获得对象数组。
以下用AJAX做一个简单的例子。新建一个网站,在根目录下添加一个一般处理程序(GetJson.ashx),代码如下(如果没接触过该语言没关系,你可以只看核心代码):
<%@ WebHandler Language="C#" Class="GetJson" %> using System; using System.Web; public class GetJson : IHttpHandler { public void ProcessRequest (HttpContext context) { string str = "[{id:1, name:'n_1'}, {id:2, name:'n_2'}]"; context.Response.ContentType = "text/plain"; context.Response.Write(str); } public bool IsReusable { get { return false; } } }
在Default.aspx 文件中添加测试脚本:
<script type="text/javascript"> function getJson() { // 在IE7下测试通过,IE6下必须创建 new ActiveXObject("MSXML2.XMLHTTP.6.0") var request = new XMLHttpRequest(); request.open('GET', 'GetJson.ashx'); request.onreadystatechange = function() { if (request.readyState == 4 && request.status == 200) { var objs = eval(request.responseText); alert(objs.length); // 2 alert(objs[0].id); // 1 alert(objs[1].name);// 'n_2' } } request.send(null); } </script>
再添加一个测试按钮即可以看到效果:
<input type="button" value="GetJson" onclick="getJson();" />
不过在我们用程序拼接XML的时候,一般不会出现节点间有空格的情况。
<%@ WebHandler Language="C#" Class="GetXml" %> using System; using System.Web; public class GetXml : IHttpHandler { public void ProcessRequest (HttpContext context) { System.Text.StringBuilder sb = new System.Text.StringBuilder("<?xml version='1.0' ?><Persons>"); string temp = "<Person><Id>{0}</Id><Name>{1}</Name></Person>"; sb.AppendFormat(temp, 1, "n_1"); sb.AppendFormat(temp, 2, "n_2"); sb.Append("</Persons>"); context.Response.ContentType = "text/xml"; context.Response.Write(sb.ToString()); } public bool IsReusable { get { return false; } } }
在Default.aspx页面添加以下脚本:
function getXml() { // 在IE7下测试通过,IE6下必须创建 new ActiveXObject("MSXML2.XMLHTTP.6.0") var request = new XMLHttpRequest(); request.open('GET', 'GetXml.ashx'); request.onreadystatechange = function() { if (request.readyState == 4 && request.status == 200) { var xmlDoc = request.responseXML; var root = xmlDoc.documentElement; var elements = root.getElementsByTagName("Person"); alert(elements.length); // 2 // elements[0].firstChild 引用到第一个Person节点的Id节点 // elements[0].firstChild.firstChild 引用到Id节点的文本节点 // 因为文本节点是元素节点的第一个子节点 alert(elements[0].firstChild.firstChild.nodeValue); // 1 alert(elements[1].lastChild.firstChild.nodeValue); // 'n_2' } } request.send(null); }
<input type="button" value="GetXml" onclick="getXml();" />
但JSON比较适合轻量级的数据交互,XML则比JSON多了一些特性,比如命名空间,还有更多的节点类型。
相关推荐
这两个脚本都简化了在JavaScript中处理JSON和XML的流程,使得开发人员能够在不同的数据格式之间灵活切换,而无需手动进行复杂的解析和序列化工作。 **使用场景** 1. **数据交换**:当客户端和服务器之间的接口需要...
在JavaScript(JS)环境中,XML(Extensible Markup Language)与JSON(JavaScript Object Notation)之间的转换是常见的数据处理任务。XML是一种结构化数据格式,常用于数据交换,而JSON则是轻量级的数据交换格式,...
在VB.NET中,可以使用内置的System.Web.Script.Serialization命名空间中的JavaScriptSerializer类来解析Json。以下是一个简单的步骤: 1. 引入命名空间: ```vb Imports System.Web.Script.Serialization ``` 2...
根据提供的信息,我们可以深入探讨如何在Kettle中解析JSON串,并连接数据库进行数据处理。本文将详细介绍使用Java库解析JSON的基本方法以及如何在Kettle环境中实现这一过程。 ### Kettle与JSON解析概述 #### 1. **...
在实际开发中,有许多现成的库和工具可以帮助进行JSON和XML的互转,如JavaScript中的`xml2js`库和`json-stringify-safe`库,Python中的`xmltodict`和`json`模块等。压缩包中的`xmlTojson`可能是一个简单的实现,用于...
JSON则可以通过`JSON.parse()`解析JSON字符串为JavaScript对象,而`JSON.stringify()`可将JavaScript对象转换为JSON字符串。 XML转JSON的步骤如下: 1. 解析XML:使用`DOMParser`将XML字符串解析为DOM对象。 2. ...
JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是两种广泛用于数据交换的格式,尤其在Web服务和应用程序之间。它们都提供了结构化的数据表示方式,但各有特点和适用场景。 **JSON** 1. **...
本文将深入探讨Delphi中用于解析JSON和XML的类,以及如何使用它们。 首先,我们来看JSON(JavaScript Object Notation)解析。JSON是一种轻量级的数据交换格式,因其易于人阅读和编写,同时也易于机器解析和生成,...
1. **解析JSON** - `org.json`库:Android SDK内置了`org.json`库,提供了`JSONObject`和`JSONArray`类来处理JSON。例如,可以使用`JSONObject.getString()`、`JSONObject.getInt()`等方法获取JSON对象的值。 - `...
对于JSON到XML的转换,可以使用Json.NET的`JsonConvert.DeserializeObject`方法解析JSON字符串,然后使用`XmlElement`或`XElement`(来自`System.Xml.Linq`命名空间)来构建XML树。以下是一个基本的转换示例: ```...
解析JSON和XML的方式有很多种,下面分别介绍: 1. JSON解析: - JavaScript中,由于JSON源自JavaScript,因此可以使用`JSON.parse()`方法直接将JSON字符串转换为JavaScript对象。 - 在Python中,可以使用`json`...
JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是两种广泛用于数据交换的格式,尤其在Web服务和应用程序之间。它们都提供了结构化的数据表示方式,但各有其特点和适用场景。 JSON是一种轻...
JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是两种广泛使用的数据交换格式,它们在Web服务和应用程序之间传输数据时起到关键作用。JSON以其简洁、易读和高效而受到青睐,而XML则以其...
1. 解析JSON:将JSON字符串解析为数据结构,如Python中的字典或列表。 2. 构建XML树:根据JSON数据结构创建相应的XML元素树。每个JSON对象转换为XML元素,每个键成为元素的属性或子元素,每个值成为元素的文本或子...
本文将详细讲解如何使用jQuery解析JSON和XML数据,通过给出的文件名称,我们可以推测这是一个关于Web应用中添加账户和应用的场景。 首先,让我们来看看JSON(JavaScript Object Notation)和XML(eXtensible Markup...
就安全性而言,由于大部分 Javascript 库都是使用 eval() 来解析数据,存在执行恶意 JSON 数据的安全漏洞;当然可以使用专门的 JSON 解析器来避免这个问题。相比,XML 更安全一些。 XML 的优点 使用 XML 作为传输...
这个过程涉及解析JSON对象,创建XML元素和属性。JavaScript中,可以使用`json2xml`或`xmlbuilder`等库来完成这个任务。例如,`xmlbuilder`可以创建一个新的XML文档,然后通过添加节点和属性来构建XML结构。 在实际...
在现代软件开发中,数据交换通常涉及JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)这两种格式,它们是网络传输数据的标准格式。JSON因其简洁和易读性而广泛应用于API接口,而XML则在更...
在IT行业中,数据交换和存储经常需要在不同的格式之间转换,比如JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)。本教程将详细讲解如何在Delphi环境中实现JSON与XML之间的转换,这对于软件...
在IT行业中,数据交换和存储经常涉及两种常见的数据序列化格式:JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)。JSON以其简洁、易读性而被广泛用于Web服务,而XML则因其丰富的结构和强大...