`
learnmore
  • 浏览: 605638 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

js解析json和xml

 
阅读更多
转自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),代码如下:
GetJson.ashx

在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();" />

注:如何用jquery来解析返回的json数据格式
   <script type="text/javascript">
    function getJSON()
    {
        $.ajax({
    type:"get",
url:"TestJSON",
dataType:"json",
success:function(data){
  $.each(data,function(i,item){
     alert(item[i].id+item[i].name);//id和name为对象的属性名称
  })
},
error:function(data){
   //
}

)
    }
</script>
      注:打印json对象的方法 Object.toJSON('这里是一个json对象');

  二、XML
    JS对XML的解析是基于DOM的,对HTML的DOM熟悉的话,解析XML就没什么困难了。
    注意:在Firefox中,解析器不会忽略空格,所以元素间的空格,FF一样会认为是一个节点。
    不过在我们用程序拼接XML的时候,一般不会出现节点间有空格的情况。

    在根目录下添加一个新的一般处理程序(GetXml.ashx),代码如下:
GetXml.ashx

    在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);
        }
    注意到代码段:var root = xmlDoc.documentElement;
    主要是为了消除IE6和其他浏览器的兼容问题,在其他浏览器下,允许request.responseXML.getElementsByTagName("Person");
    添加测试按钮:
<input type="button" value="GetXml" onclick="getXml();" />


总结:从代码上很容易看出,解析JSON相对直观,在网络中需要传输的字符串也比较少,解析过程中也不需要考虑浏览器兼容问题。
     但JSON比较适合轻量级的数据交互,XML则比JSON多了一些特性,比如命名空间,还有更多的节点类型。
分享到:
评论

相关推荐

    jquery.json2xml.js和jquery.xml2json.js

    这两个脚本都简化了在JavaScript中处理JSON和XML的流程,使得开发人员能够在不同的数据格式之间灵活切换,而无需手动进行复杂的解析和序列化工作。 **使用场景** 1. **数据交换**:当客户端和服务器之间的接口需要...

    js下xml转json和json转xml

    在JavaScript(JS)环境中,XML(Extensible Markup ...总之,XML和JSON之间的转换在JavaScript环境下是常见的需求,了解其基本原理和方法对于Web开发至关重要。同时,掌握和利用现有的转换库能进一步提升开发效率。

    VB解析Json转换为Xml

    在VB.NET中,可以使用内置的System.Web.Script.Serialization命名空间中的JavaScriptSerializer类来解析Json。以下是一个简单的步骤: 1. 引入命名空间: ```vb Imports System.Web.Script.Serialization ``` 2...

    json和xml互转

    在实际开发中,有许多现成的库和工具可以帮助进行JSON和XML的互转,如JavaScript中的`xml2js`库和`json-stringify-safe`库,Python中的`xmltodict`和`json`模块等。压缩包中的`xmlTojson`可能是一个简单的实现,用于...

    Json和XML解析demo

    JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是两种广泛用于数据交换的格式,尤其在Web服务和应用程序之间。它们都提供了结构化的数据表示方式,但各有特点和适用场景。 **JSON** 1. **...

    kettle解析json串

    根据提供的信息,我们可以深入探讨如何在Kettle中解析JSON串,并连接数据库进行数据处理。本文将详细介绍使用Java库解析JSON的基本方法以及如何在Kettle环境中实现这一过程。 ### Kettle与JSON解析概述 #### 1. **...

    json和xml比较

    JSON 和 XML 比较 JSON 和 XML 是两种常用的数据交换格式,它们之间有很多相似之处,也有许多不同之处。下面我们将从多方面对比 JSON 和 XML。 可读性和可扩展性 JSON 和 XML 都是文本表示的数据格式,可以跨平台...

    Jquery解析JSON和XML示例

    本文将详细讲解如何使用jQuery解析JSON和XML数据,通过给出的文件名称,我们可以推测这是一个关于Web应用中添加账户和应用的场景。 首先,让我们来看看JSON(JavaScript Object Notation)和XML(eXtensible Markup...

    Json和xml的数据解析

    JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是两种广泛用于数据交换的格式,尤其在Web服务和应用程序之间。它们都提供了结构化的数据表示方式,但各有其特点和适用场景。 JSON是一种轻...

    Json和Xml离线格式化工具

    在IT行业中,数据交换和存储经常涉及两种常见的数据序列化格式:JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)。JSON以其简洁、易读性而被广泛用于Web服务,而XML则因其丰富的结构和强大...

    Delphi Json/XML 解析类

    本文将深入探讨Delphi中用于解析JSON和XML的类,以及如何使用它们。 首先,我们来看JSON(JavaScript Object Notation)解析。JSON是一种轻量级的数据交换格式,因其易于人阅读和编写,同时也易于机器解析和生成,...

    Xml2Json and Json2Xml

    JSON则可以通过`JSON.parse()`解析JSON字符串为JavaScript对象,而`JSON.stringify()`可将JavaScript对象转换为JSON字符串。 XML转JSON的步骤如下: 1. 解析XML:使用`DOMParser`将XML字符串解析为DOM对象。 2. ...

    json和xml互转.jar

    开发者可以输入JSON字符串,该程序会解析JSON并生成对应的XML字符串;同样,也可以输入XML字符串,程序将其解析并转化为等效的JSON格式。这种转换对于那些需要在使用JSON的应用和使用XML的应用之间传递数据的开发者...

    Json、XML解析

    解析JSON和XML的方式有很多种,下面分别介绍: 1. JSON解析: - JavaScript中,由于JSON源自JavaScript,因此可以使用`JSON.parse()`方法直接将JSON字符串转换为JavaScript对象。 - 在Python中,可以使用`json`...

    json 解析 xml

    1. **解析JSON** - `org.json`库:Android SDK内置了`org.json`库,提供了`JSONObject`和`JSONArray`类来处理JSON。例如,可以使用`JSONObject.getString()`、`JSONObject.getInt()`等方法获取JSON对象的值。 - `...

    C++结构体和json/xml之间互相转换

    在现代软件开发中,数据交换通常涉及JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)这两种格式,它们是网络传输数据的标准格式。JSON因其简洁和易读性而广泛应用于API接口,而XML则在更...

    (C#)json to xml 解析转换源代码

    这个标签表明,可能包含的压缩包文件`Json2Xml`中包含了完成这一转换的具体实现,包括源代码文件,可能有类、方法和其他辅助功能,用于解析JSON并生成XML。 总结来说,C#中JSON到XML的转换涉及到解析JSON字符串,...

    json2xml.zip

    1. 解析JSON:将JSON字符串解析为数据结构,如Python中的字典或列表。 2. 构建XML树:根据JSON数据结构创建相应的XML元素树。每个JSON对象转换为XML元素,每个键成为元素的属性或子元素,每个值成为元素的文本或子...

    json解析xml 的jar包

    总的来说,这个“json解析xml的jar包”是一个便捷的工具,可以帮助Java开发者快速处理XML和JSON之间的转换,提高开发效率,同时保证了转换的正确性和项目的稳定性。在选择和使用这样的库时,应考虑其性能、兼容性、...

    XML to JSON and JSON to XML converter

    这个过程涉及解析JSON对象,创建XML元素和属性。JavaScript中,可以使用`json2xml`或`xmlbuilder`等库来完成这个任务。例如,`xmlbuilder`可以创建一个新的XML文档,然后通过添加节点和属性来构建XML结构。 在实际...

Global site tag (gtag.js) - Google Analytics