定義:JSON是一種與開發語言無關的,輕量級的數據格式,全稱是Javascript Object Notation(JS對象標記)。也就是說,JSON只是一種數據格式或者說是規範。
原理:
JSON-java最重要的類有三個。
JSONObject : 包裝一個map。 用來表示一個{k:v,k2:v2,k3:[1,2]}形式的json數據
JSONArray :包裝一個ArrayList。用來表示一個[1,2,{k:v}]形式的json數據
JSONTokener:包裝一個Reader。用來存儲、讀取、操作一個表示JSON數據的字符串
過程:
1、JSONObject和JSONArray都可以用一個JSONTokener作爲構造參數去實例化。
2、解析時可能會產生多個JSONObject或者JSONArray。但是他們都是操作同一個JSONTokener。
3、JSONObject和JSONArray可以分別通過JSONTokener提供的方法解析出對方。可以實現嵌套
JSON的規則: 對象是一個無序的 “ ‘名稱/值’ 對” 集合。一個對象以“{”(左括號)開始,“}”(右括號)結束。每個“名稱”後跟一個“:”(冒號);“‘名稱/值’ 對”之間使用“,”(逗號)分隔。
標準的JSON數據表示:
數據結構:
Object:使用花括號{}包含的鍵值對結構,key必須爲string類型,value可以爲任何類型或數據結構。
Array:使用中括號[]來起始,並用逗號來分隔元素。
基本數據類型
String,number,true,false,null
優點:易於人的閱讀與編寫,易於程序解析與生產。
例子:
{
“name”:“汪洋”,
“Mayjor”:[“數學”,“語文”,“英語”],
“學習好”:true
}
JSON在Java中的使用:
首先需要導入各種包:
json-lib-2.3-jdk15.jar commons-beanutils-1.7.0.jar commons-httpclient-3.1.jar commons-lang-2.3.jar commons-logging-1.0.4.jar commons-collections-3.1.jar
這些包可以在這個鏈接下載:http://download.csdn.net/download/qq_31126879/9414430
對了,別忘了在開頭同時需要import org.json.*(導入json各種包,比如,import org.json.JSONObject)
建立JSON對象:
JSOObject json = new JSONObject();
json.put(String,Object)
從文本中讀入JSON對象:
File file = new File(ReadJSONSample.class.getResource("/Wangxiaoer.json"));
String content = FileUtils.readFileToString(file)
JSONObject jsonobject = new JSONObject(content)
可執行代碼:
package com.zhiwenwu.json0;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;
//import org.json.JSONObject;
public class JsonObjectSample{
public static void main(String[] args){
jSONObject();
}
private static void jSONObject(){
JSONObject wangxiaoer = new JSONObject();//new一個JSONObject對象,命名爲wangxiaoerObject nullObj = null; //解決put中因二義性引起的編譯錯誤
try{
wangxiaoer.put("name","王小二");
wangxiaoer.put("age",25.2);
wangxiaoer.put("birthday","1990-01-01");
wangxiaoer.put("school","藍翔");
wangxiaoer.put("major",new String[] {"理髮","挖掘機"});
wangxiaoer.put("has_girlfriend",false);
wangxiaoer.put("car",1);
wangxiaoer.put("house",1);
System.out.println(wangxiaoer.toString());//輸出JSON格式的wangxiaoer數據
}catch(JSONException e){
e.printStackTrace();
}
}
}