json教程及json在Java中的使用
說明:
JSON是開發中最常用的一種資料交換格式,這裡我將根據自己的學習以及開發經驗來對json進行一些講解,並介紹一下json在Java最常用的用法來與大家共同學習。
json簡介
百度百科:
JSON(JavaScript Object Notation, JS 物件標記) 是一種輕量級的資料交換格式。它基於 ECMAScript 規範的一個子集,採用完全獨立於程式語言的文字格式來儲存和表示資料。簡潔和清晰的層次結構使得 JSON 成為理想的資料交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提升網路傳輸效率。
什麼是 JSON ?
JSON 指的是 JavaScript 物件表示法(JavaScript Object Notation)
JSON 是輕量級的文字資料交換格式
JSON 獨立於語言 *
JSON 具有自我描述性,更易理解
* JSON 使用 JavaScript 語法來描述資料物件,但是 JSON 仍然獨立於語言和平臺。JSON 解析器和 JSON 庫支援許多不同的程式語言。
類似 XML
JSON 是純文字
JSON 具有“自我描述性”(人類可讀)
JSON 具有層級結構(值中存在值)
JSON 可通過 JavaScript 進行解析
JSON 資料可使用 AJAX 進行傳輸
相比 XML 的不同之處
沒有結束標籤
更短
讀寫的速度更快
能夠使用內建的 JavaScript eval() 方法進行解析
使用陣列
不使用保留字
JSON 語法
一個例子:
{
"student": [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName ":"Bush" },
{ "firstName":"Thomas" , "lastName":"Carter" }
]
}
JSON 語法規則
JSON 語法是 JavaScript 物件表示法語法的子集。
資料在名稱/值對中
資料由逗號分隔
花括號儲存物件
方括號儲存陣列
JSON 名稱/值對
JSON 資料的書寫格式是:名稱/值對。
名稱/值對包括欄位名稱(在雙引號中),後面寫一個冒號,然後是值:
"firstName" : "John"
這很容易理解,等價於這條 程式 語句:
firstName = "John"
JSON 值
JSON 值可以是:
數字(整數或浮點數)
字串(在雙引號中)
邏輯值(true 或 false)
陣列(在方括號中)
物件(在花括號中)
null
JSON 物件
JSON 物件在花括號中書寫:
物件可以包含多個名稱/值對:
{ "firstName":"John" , "lastName":"Doe" }
這一點也容易理解,與這條 JavaScript 語句等價:
firstName = "John"
lastName = "Doe"
JSON 陣列
JSON 陣列在方括號中書寫:
陣列可包含多個物件:
{
"student": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
在上面的例子中,物件 “student” 是包含三個物件的陣列。每個物件代表一條關於某人(有姓和名)的記錄。
json在Java中使用
首先,在JAVA中使用JSON需要引入 org.json 包(點選 這裡 可以下載相應的JAR包!), 並在程式中引入相應的JSON類:
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
json使用時,首先在服務端將資料進行json封裝:
//宣告一個Hash物件並新增資料
Map params = new HashMap();
params.put("username", username);
params.put("user_json", user);
//宣告JSONArray物件並輸入JSON字串
JSONArray array = JSONArray.fromObject(params);
put.println(array.toString());
然後在前端進行資料的相應解析,也就是將json資料進行解析:
//@description: 根據接收到的JSON字串來解析字串中所包含的資料和資料物件
//接收到的JSON字串
String result = "[{\"username\": \"your name\", \"user_json\": {\"username\": \"your name\", \"nickname\": \"your nickname\"}}]";
//根據字串生成JSON物件
JSONArray resultArray = new JSONArray(result);
JSONObject resultObj = resultArray.optJSONObject(0);
//獲取資料項
String username = resultObj.getString("username");
//獲取資料物件
JSONObject user = resultObj.getJSONObject("user_json");
String nickname = user.getString("nickname");
另外,關於json在Java中的使用最重要的就是幾種資料格式之間的轉化:
1、String 轉換為JSON物件
public class StringToJSON {
public static void main(String[] args) throws JSONException{
System.out.println("abc");
//定義JSON字串
String jsonStr = "{\"id\": 2," +
" \"title\": \"json title\", " +
"\"config\": {" +
"\"width\": 34," +
"\"height\": 35," +
"}, \"data\": [" +
"\"JAVA\", \"JavaScript\", \"PHP\"" +
"]}";
//轉換成為JSONObject物件
JSONObject jsonObj = new JSONObject(jsonStr);
//從JSONObject物件中獲取資料
JavaBean bean = new JavaBean();
//根據屬性名稱獲取int型資料;
bean.setId(jsonObj.getInt("id"));
//根據屬性名獲取String資料;
bean.setTitle(jsonObj.getString("title"));
//根據屬性名獲取JSONObject類
JSONObject config = jsonObj.getJSONObject("config");
bean.setWidth(config.getInt("width"));
bean.setHeight(config.getInt("height"));
//根據屬性名獲取JSONArray陣列
JSONArray data = jsonObj.getJSONArray("data");
for(int index = 0, length = data.length(); index < length; index++) {
// bean.setLanguages(String[]); }
}
}
2、JSON物件轉換為String字串
//建立JSONObject物件
JSONObject json = new JSONObject();
//向json中新增資料
json.put("username", "wanglihong");
json.put("height", 12.5);
json.put("age", 24);
//建立JSONArray陣列,並將json新增到陣列
JSONArray array = new JSONArray();
array.put(json);
//轉換為字串
String jsonStr = array.toString();
3、集合轉換為JSONArray物件
//初始化ArrayList集合並新增資料
List<String> list = new ArrayList<String>();
list.add("username");
list.add("age");
list.add("sex");
//初始化HashMap集合並新增陣列
Map map = new HashMap();
map.put("bookname", "CSS3實戰");
map.put("price", 69.0);
//初始化JSONArray物件,並新增資料
JSONArray array = new JSONArray();
array.put(list);
array.put(map);
//生成的JSON字串為:[["username","age","sex"],{"price":69,"bookname":"CSS3實戰"}]
最後附上一個最常用的json線上解析工具(點我跳轉),以便大家以後的程式設計變得更加輕鬆愉快。