你的位置:首页 > Java教程

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

JSON 名称/值对

JSON 数据的书写格式是:名称/值对。
名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:
{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}

  JSON格式支持的数据类型有以下:

类型描述
Number在JavaScript中的双精度浮点格式
String双引号的反斜杠转义的Unicode
Booleantrue 或 false
Array值的有序序列
Value它可以是一个字符串,一个数字,真的还是假(true/false),空(null )等
Object无序集合键值对
Whitespace可以使用任何一对中的令牌
nullempty

以下转自:易百教程网

JSON和Java实体之间的映射

JSON.simple实体映射从左侧向右侧解码或解析,并映射实体从右侧到左侧编码。

JSONJava
stringjava.lang.String
numberjava.lang.Number
true|falseava.lang.Boolean
nullnull
arrayjava.util.List
objectjava.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]