JAVA & JSON详解
JSON定义
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(网络传输速率)。
JSON用途
- 
使用基于JavaScript的应用程序,其中包括浏览器扩展和网站 
- 
使用JSON格式序列化和结构化的数据传输网络连接 
- 
这主要用于服务器和Web应用程序之间的数据传输 
- 
Web服务和API采用JSON格式提供公共数据 
- 
它可以用来与现代编程语言 
JSON的特点
- 
易于读写JSON 
- 
轻量级的基于文本的交换格式 
- 
独立语言 
JSON 语法规则
- 
数据在键值对中
- 
数据由逗号分隔
- 
花括号保存对象
- 
方括号保存数组
JSON 名称/值对
{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}
JSON格式支持的数据类型有以下:
| 类型 | 描述 | 
|---|---|
| Number | 在JavaScript中的双精度浮点格式 | 
| String | 双引号的反斜杠转义的Unicode | 
| Boolean | true 或 false | 
| Array | 值的有序序列 | 
| Value | 它可以是一个字符串,一个数字,真的还是假(true/false),空(null )等 | 
| Object | 无序集合键值对 | 
| Whitespace | 可以使用任何一对中的令牌 | 
| null | empty | 
以下转自:易百教程网
JSON和Java实体之间的映射
JSON.simple实体映射从左侧向右侧解码或解析,并映射实体从右侧到左侧编码。
| JSON | Java | 
|---|---|
| string | java.lang.String | 
| number | java.lang.Number | 
| true|false | ava.lang.Boolean | 
| null | null | 
| array | java.util.List | 
| object | java.util.Map | 
虽然解码,默认 java.util.List的具体类是具体类 org.json.simple.JSONArray 和默认 java.util.Map 是org.json.simple.JSONObject。
下面是一个简单的例子来编码JSONObject使用Java的JSON对象的一个子类的java.util.HashMap 无序。如果您需要严格的顺序元素使用方法JSONValue.toJSONString(映射)有序映射实现作为 java.util.LinkedHashMap等。
import org.json.simple.JSONObject;
class JsonEncodeDemo 
{
   public static void main(String[] args) 
   {
      JSONObject obj = new JSONObject();
      obj.put("name", "foo");
      obj.put("num", new Integer(100));
      obj.put("balance", new Double(1000.21));
      obj.put("is_vip", new Boolean(true));
      System.out.print(obj);
   }
}
虽然上述程序的编译和执行,这将产生以下结果:
{"balance": 1000.21, "num":100, "is_vip":true, "name":"foo"}
以下是另一个例子,它显示了使用Java的JSONObject 的 JSON对象流:
import org.json.simple.JSONObject;
class JsonEncodeDemo 
{
   public static void main(String[] args) 
   {
      JSONObject obj = new JSONObject();
      obj.put("name","foo");
      obj.put("num",new Integer(100));
      obj.put("balance",new Double(1000.21));
      obj.put("is_vip",new Boolean(true));
      StringWriter out = new StringWriter();
      obj.writeJSONString(out);
      
      String jsonText = out.toString();
      System.out.print(jsonText);
   }
} 
虽然上述程序的编译和执行,这将产生以下结果:
{"balance": 1000.21, "num":100, "is_vip":true, "name":"foo"} 
在Java的JSON解码
下面的例子利用的JSONObject 和JSONArray JSONObject 是一个java.util.Map JSONArray是一个java.util.List,所以可以对其进行访问 Map 和List 的标准操作。
import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.ParseException;
import org.json.simple.parser.JSONParser;
class JsonDecodeDemo 
{
   public static void main(String[] args) 
   {
      JSONParser parser=new JSONParser();
      String s = "[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]";
      try{
         Object obj = parser.parse(s);
         JSONArray array = (JSONArray)obj;
         System.out.println("The 2nd element of array");
         System.out.println(array.get(1));
         System.out.println();
         JSONObject obj2 = (JSONObject)array.get(1);
         System.out.println("Field \"1\"");
         System.out.println(obj2.get("1"));    
         s = "{}";
         obj = parser.parse(s);
         System.out.println(obj);
         s= "[5,]";
         obj = parser.parse(s);
         System.out.println(obj);
         s= "[5,,2]";
         obj = parser.parse(s);
         System.out.println(obj);
      }catch(ParseException pe){
         System.out.println("position: " + pe.getPosition());
         System.out.println(pe);
      }
   }
}
虽然上述程序的编译和执行,这将产生以下结果:
The 2nd element of array
{"1":{"2":{"3":{"4":[5,{"6":7}]}}}}
Field "1"
{"2":{"3":{"4":[5,{"6":7}]}}}
{}
[5]
[5,2]
| 博客地址: | http://www.cnblogs.com/oumyye/ | 
| 博客版权: | 本文以学习、研究和分享为主,欢迎转载,转载请务必注明出处,谢谢合作。 如果文中有不妥或者错误的地方请指出。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步! | 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号