ITPub博客

首页 > 应用开发 > Java > JSON详解

JSON详解

Java 作者:nonojie 时间:2015-08-26 17:53:40 0 删除 编辑

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 语法是 JavaScript 对象表示语法的子集。
  • 数据在键值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

JSON 名称/值对

JSON 数据的书写格式是:名称/值对。
名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:
1
{"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等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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);
   }
}


虽然上述程序的编译和执行,这将产生以下结果:

1
{"balance"1000.21"num":100"is_vip":true"name":"foo"}

以下是另一个例子,它显示了使用Java的JSONObject 的 JSON对象流:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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);
   }
} 

虽然上述程序的编译和执行,这将产生以下结果:

1
{"balance"1000.21"num":100"is_vip":true"name":"foo"} 

在Java的JSON解码

下面的例子利用的JSONObject 和JSONArray JSONObject 是一个java.util.Map JSONArray是一个java.util.List,所以可以对其进行访问 Map 和List 的标准操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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);
      }
   }
}

虽然上述程序的编译和执行,这将产生以下结果:

1
2
3
4
5
6
7
8
The 2nd element of array
{"1":{"2":{"3":{"4":[5,{"6":7}]}}}}
 
Field "1"
{"2":{"3":{"4":[5,{"6":7}]}}}
{}
[5]
[5,2]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30417691/viewspace-1783385/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-08-17

  • 博文量
    12
  • 访问量
    6015