`

JSON格式解析 .

    博客分类:
  • json
 
阅读更多
String,Number 和 Boolean 用 JSON 表示非常简单。

除了字符 ",/,/ 和一些控制符(/b,/f,/n,/r,/t)需要编码外,其他 Unicode 字符可以直接输出。

Boolean 类型表示为 true 或 false 。此外,JavaScript 中的 null 被表示为 null,注意,true、false 和 null 都没有双引号,否则将被视为一个 String 。

JSON 还可以表示一个数组对象,使用 [] 包含所有元素,每个元素用逗号分隔,元素可以是任意的 Value

Object 对象在 JSON 中是用 {} 包含一系列无序的 Key-Value 键值对表示的,实际上此处的 Object 相当于 Java 中的 Map<String, Object>,而不是 Java 的 Class 。注意 Key 只能用 String 表示。

例如,一个 Address 对象包含如下 Key-Value:
city:Beijing 
 street:Chaoyang Road 
 postcode:100025(整数)

用 JSON 表示如下:
{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}

其中 Value 也可以是另一个 Object 或者数组,因此,复杂的 Object 可以嵌套表示,例如,一个 Person 对象包含 name 和 address 对象,可以表示如下:
{"name":"Michael","address":
    {"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
}

我们通过一个简单的 JavaScript 方法就能看到客户端如何将 JSON 数据表示给用户:
function handleJson() { 
  var j={"name":"Michael","address":
      {"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
  }; 
  document.write(j.name); 
  document.write(j.address.city); 
 }

假定服务器返回的 JSON 数据是上文的:
{"name":"Michael","address":
    {"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
}

只需将其赋值给一个 JavaScript 变量,就可以立刻使用该变量并更新页面中的信息了

服务器端输出 JSON 格式数据

以 Java 为例,我们将演示将一个 Java 对象编码为 JSON 格式的文本。
将 String 对象编码为 JSON 格式时,只需处理好特殊字符即可。另外,必须用 (") 而非 (') 表示字符串:
 
 static String string2Json(String s) { 
    StringBuilder sb = new StringBuilder(s.length()+20); 
    sb.append('/"'); 
    for (int i=0; i<s.length(); i++) { 
        char c = s.charAt(i); 
        switch (c) { 
        case '/"': 
            sb.append("///""); 
            break; 
        case '//': 
            sb.append("////"); 
            break; 
        case '/': 
            sb.append("///"); 
            break; 
        case '/b': 
            sb.append("//b"); 
            break; 
        case '/f': 
            sb.append("//f"); 
            break; 
        case '/n': 
            sb.append("//n"); 
            break; 
        case '/r': 
            sb.append("//r"); 
            break; 
        case '/t': 
            sb.append("//t"); 
            break; 
        default: 
            sb.append(c); 
        } 
    } 
    sb.append('/"'); 
    return sb.toString(); 
 } 
 

将 Number 表示为 JSON 就容易得多,利用 Java 的多态,我们可以处理 Integer,Long,Float 等多种 Number 格式:
 
 static String number2Json(Number number) { 
    return number.toString(); 
 } 
 

Boolean 类型也可以直接通过 toString() 方法得到 JSON 的表示:
 
 static String boolean2Json(Boolean bool) { 
    return bool.toString(); 
 } 
 
要将数组编码为 JSON 格式,可以通过循环将每一个元素编码出来:
 
 static String array2Json(Object[] array) { 
    if (array.length==0) 
        return "[]"; 
    StringBuilder sb = new StringBuilder(array.length << 4); 
    sb.append('['); 
    for (Object o : array) { 
        sb.append(toJson(o)); 
        sb.append(','); 
    } 
    // 将最后添加的 ',' 变为 ']': 
    sb.setCharAt(sb.length()-1, ']'); 
    return sb.toString(); 
 } 
 

最后,我们需要将 Map<String, Object> 编码为 JSON 格式,因为 JavaScript 的 Object 实际上对应的是 Java 的 Map<String, Object> 。该方法如下:
 
 static String map2Json(Map<String, Object> map) { 
    if (map.isEmpty()) 
        return "{}"; 
    StringBuilder sb = new StringBuilder(map.size() << 4); 
    sb.append('{'); 
    Set<String> keys = map.keySet(); 
    for (String key : keys) { 
        Object value = map.get(key); 
        sb.append('/"'); 
        sb.append(key); 
        sb.append('/"'); 
        sb.append(':'); 
        sb.append(toJson(value)); 
        sb.append(','); 
    } 
    // 将最后的 ',' 变为 '}': 
    sb.setCharAt(sb.length()-1, '}'); 
    return sb.toString(); 
 } 

为了统一处理任意的 Java 对象,我们编写一个入口方法 toJson(Object),能够将任意的 Java 对象编码为 JSON 格式:
 
 public static String toJson(Object o) { 
    if (o==null) 
        return "null"; 
    if (o instanceof String) 
        return string2Json((String)o); 
    if (o instanceof Boolean) 
        return boolean2Json((Boolean)o); 
    if (o instanceof Number) 
        return number2Json((Number)o); 
    if (o instanceof Map) 
        return map2Json((Map<String, Object>)o); 
    if (o instanceof Object[]) 
        return array2Json((Object[])o); 
    throw new RuntimeException("Unsupported type: " + o.getClass().getName()); 
 }

 

JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。 JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。
JSON的规则很简单:对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。具体细节参考http://www.json.org/json-zh.html

举个简单的例子:

js 代码
function showJSON() {   
    var user =   
     {   
        "username":"andy",   
        "age":20,   
        "info": { "tel": "123456", "cellphone": "98765"},   
        "address":   
             [   
                 {"city":"beijing","postcode":"222333"},   
                 {"city":"newyork","postcode":"555666"}   
             ]   
     }   
       
     alert(user.username);   
     alert(user.age);   
     alert(user.info.cellphone);   
     alert(user.address[0].city);   
     alert(user.address[0].postcode);   
}   
这表示一个user对象,拥有username, age, info, address 等属性。

同样也可以用JSON来简单的修改数据,修改上面的例子

js 代码
function showJSON() {   
    var user =   
     {   
        "username":"andy",   
        "age":20,   
        "info": { "tel": "123456", "cellphone": "98765"},   
        "address":   
             [   
                 {"city":"beijing","postcode":"222333"},   
                 {"city":"newyork","postcode":"555666"}   
             ]   
     }   
       
     alert(user.username);   
     alert(user.age);   
     alert(user.info.cellphone);   
     alert(user.address[0].city);   
     alert(user.address[0].postcode);   
       
     user.username = "Tom";   
     alert(user.username);   
}   
JSON提供了json.js包,下载http://www.json.org/json.js 后,将其引入然后就可以简单的使用object.toJSONString()转换成JSON数据。

js 代码
function showCar() {   
    var carr = new Car("Dodge", "Coronet R/T", 1968, "yellow");   
     alert(carr.toJSONString());   
}   
  
function Car(make, model, year, color)        {   
     this.make   =   make;   
     this.model   =   model;   
     this.year   =   year;   
     this.color   =   color;   
}   
可以使用eval来转换JSON字符到Object

js 代码
function myEval() {   
    var str = '{ "name": "Violet", "occupation": "character" }';   
    var obj = eval('(' + str + ')');   
     alert(obj.toJSONString());   
}   
或者使用parseJSON()方法

js 代码
function myEval() {   
    var str = '{ "name": "Violet", "occupation": "character" }';   
    var obj = str.parseJSON();   
     alert(obj.toJSONString());   
}   
下面使用prototype写一个JSON的ajax例子。

先写一个servlet (我的是servlet.ajax.JSONTest1.java)就写一句话
java 代码
response.getWriter().print("{ /"name/": /"Violet/", /"occupation/": /"character/" }");  
再在页面中写一个ajax的请求

js 代码
function sendRequest() {   
    var url = "/MyWebApp/JSONTest1";   
    var mailAjax = new Ajax.Request(   
         url,   
         {   
             method: 'get',   
             onComplete: jsonResponse   
         }   
     );   
}   
  
function jsonResponse(originalRequest) {   
     alert(originalRequest.responseText);   
    var myobj = originalRequest.responseText.parseJSON();   
     alert(myobj.name);   
}   
prototype-1.5.1.js中提供了JSON的方法,String.evalJSON(), 可以不使用json.js, 修改上面的方法

js 代码
function jsonResponse(originalRequest) {   
     alert(originalRequest.responseText);   
    var myobj = originalRequest.responseText.evalJSON(true);   
     alert(myobj.name);   
}   
JSON还提供了java的jar包 http://www.json.org/java/index.html API也很简单,下面举个例子

在javascript中填加请求参数

js 代码
function sendRequest() {   
    var carr = new Car("Dodge", "Coronet R/T", 1968, "yellow");   
    var pars = "car=" + carr.toJSONString();   
  
    var url = "/MyWebApp/JSONTest1";   
    var mailAjax = new Ajax.Request(   
         url,   
         {   
             method: 'get',   
             parameters: pars,   
             onComplete: jsonResponse   
         }   
     );   
}   
使用JSON请求字符串就可以简单的生成JSONObject并进行解析,修改servlet添加JSON的处理(要使用json.jar)

java 代码
privatevoid doService(HttpServletRequest request, HttpServletResponse response) throws IOException {   
         String s3 = request.getParameter("car");   
        try {   
            JSONObject jsonObj = new JSONObject(s3);   
             System.out.println(jsonObj.getString("model"));   
             System.out.println(jsonObj.getInt("year"));   
         } catch (JSONException e) {   
             e.printStackTrace();   
         }   
         response.getWriter().print("{ /"name/": /"Violet/", /"occupation/": /"character/" }");   
     }   
同样可以使用JSONObject生成JSON字符串,修改servlet

java 代码
privatevoid doService(HttpServletRequest request, HttpServletResponse response) throws IOException {   
         String s3 = request.getParameter("car");   
        try {   
            JSONObject jsonObj = new JSONObject(s3);   
             System.out.println(jsonObj.getString("model"));   
             System.out.println(jsonObj.getInt("year"));   
         } catch (JSONException e) {   
             e.printStackTrace();   
         }   
           
        JSONObject resultJSON = new JSONObject();   
        try {   
             resultJSON.append("name", "Violet")   
                       .append("occupation", "developer")   
                       .append("age", new Integer(22));   
             System.out.println(resultJSON.toString());   
         } catch (JSONException e) {   
             e.printStackTrace();   
         }   
         response.getWriter().print(resultJSON.toString());   
     }   
js 代码
function jsonResponse(originalRequest) {   
     alert(originalRequest.responseText);   
    var myobj = originalRequest.responseText.evalJSON(true);   
     alert(myobj.name);   
     alert(myobj.age);   
}  
参考

http://www.json.org/js.html

http://www.blogjava.net/Jkallen/archive/2006/03/28/37905.html

http://www.json.org/

http://www.prototypejs.org/learn/json

http://www.json.org/java/index.html

http://www.ibm.com/developerworks/cn/web/wa-ajaxintro10/index.html

 

分享到:
评论
1 楼 dreamstoney 2013-01-22  
[size=small]
[flash=200,200][img][list]
[*]
引用
[u][/u]
[/list][/img][/flash]
[/size]

相关推荐

    JSONObject解析json,C# asp.net JSON解析 com.force.json

    `com.force.json`是一个针对.NET平台的高性能JSON库,由Salesforce公司开发,它提供了快速且内存效率高的JSON解析和生成功能。这个库适用于那些需要高效处理大量JSON数据的应用场景。 首先,我们需要了解JSON的基本...

    json-lib.jar

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,设计简单且易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,但并非JavaScript的方言,因此在各种编程语言中都能得到广泛...

    jquery.json2xml.js和jquery.xml2json.js

    JSON是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式,同时非常易于人阅读和编写,也易于机器解析和生成。JSON格式基于JavaScript的一个子集,包括对象、数组、字符串、数字、布尔值和null等基本类型。...

    JSON格式化.zip

    提供的32位和64位版本的JSON格式化插件,使得用户可以在NodePad++中直接对JSON文件进行美化和解析。安装插件后,用户可以使用快捷键或菜单选项快速对JSON文档进行格式调整,使其具有良好的缩进和换行,便于理解和...

    json-20160810.jar

    2. JSON解析:JSON解析器是用于将JSON格式的文本解析成可以操作的对象结构。例如,解析一个包含用户信息的JSON字符串,将其转换为User类的实例。这个jar包可能包含了这样的解析器,使得开发者可以方便地获取和操作...

    谷歌json格式插件.zip

    JSON格式通常用于替代XML,因为它的语法更简单,解析速度更快。 在“谷歌json格式插件.zip”这个压缩包中,我们可以看到几个与JSON相关的文件,这些文件可能是为了帮助用户更好地在谷歌浏览器(Chrome)中查看和...

    json格式化.zip

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛应用于Web服务与客户端...了解并掌握这类工具的使用,对于处理和理解复杂的JSON数据至关重要,特别是在进行Web开发、数据分析或者API交互时。

    fastjson-1.2.4.jar、json-20160810.jar

    一、Fastjson:高效且易用的JSON解析器与生成器 Fastjson是阿里巴巴开发的一个高性能的Java JSON库,它的设计目标是快速、小巧、易用,无需额外的依赖,这使得它在许多项目中受到青睐。Fastjson的核心特性包括: 1...

    编译好的json_lib.lib 包含64位,32位,头文件

    JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在本资源中,我们有一个名为`json_lib.lib`的预编译库,它适用于两种不同的处理器架构:64位和32位。这意味着无论你的项目是为64位...

    VC++读取json格式数据.rar.rar

    标题“VC++读取json格式数据.rar.rar”表明这是一个关于使用C++在Visual C++(VC++)环境下解析和操作JSON数据的资源包。资源包中包含了一个名为“626.pptx”的演示文稿和一个名为“VC++读取json格式数据.rar”的...

    Unity能够在WebGL包使用的json解析.dll

    JSON解析.dll是Unity中用于处理JSON数据的库,它允许开发者将JSON字符串转化为C#对象或者将C#对象转化为JSON字符串。 在Unity与WebGL的结合使用中,由于WebGL的目标是浏览器环境,因此存在一些特定的限制。例如,...

    jquery.json-2.4.min.js

    JSON,全称JavaScript Object Notation,是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式,同时也易于人阅读和编写,同时也易于机器解析和生成。在Web开发中,JSON是JavaScript原生格式,这使得JSON...

    JSON net.sf.json jar包

    1. **JSON与Java对象的互转**:这个库提供了便捷的方法将Java对象(如Java Bean、Map、List等)转换为JSON格式的字符串,同时也支持将JSON字符串解析成相应的Java对象。这在处理前后端交互或者内部数据存储时非常...

    最新中国地图js&json数据文件.zip

    JavaScript(js)是一种广泛用于网页和网络应用的编程语言,而JSON(JavaScript Object Notation)则是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在这个压缩包中,`js`文件很可能包含...

    JSON_Format.rar

    这个单元可能包含了自定义的JSON解析器和格式化器,用以将原始的JSON字符串转换为具有缩进和换行的易读格式。为了防止内存泄露,开发人员可能使用了智能指针或者其他内存管理技术。 `uMainForm.pas`则是`uMainForm....

    JSON解析工具.exe

    适用于json解析,美观直观的观看数据

    ArduinoJson-5.x_arduinojson.h下载_ArduinoJson5_arduino库_

    ArduinoJson 是一个专门为 Arduino 平台设计的 JSON 解析库,它的版本5.x 提供了在微控制器上处理 JSON 数据的强大功能。这个库允许 Arduino 开发者轻松地将 JSON 格式的数据转换为 Arduino 可以理解的结构,并且...

    json3.js 【JS / JavaScript 中解析JSON的js包,JSON官方的JSON解析包】

    json3.js 【JS / JavaScript 中解析JSON的js包,JSON官方的JSON解析包】。JavaScript中解析JSON的js包,页面中引入json3.js,即可使用。 使用方法:JSON.parse(str), JSON.stringify(obj) 更多详情请参考博文: ...

    JSON解析demo.zip

    在Android开发中,JSON解析是至关重要的,因为很多API接口返回的数据都是JSON格式。 在Android中,我们可以使用多种库来解析JSON数据,如`org.json`库(内置于Android SDK)、Gson库、Jackson库以及FastJson库等。...

Global site tag (gtag.js) - Google Analytics