(1)json中不區分整數、小數等類型, 而統一使用Number來存儲數位。
(2)Array表示陣列, 以中括弧"[]"括起來, 元素之間以逗號分隔, 元素可以為任意類型。
(3)Object表示物件, 類似於C語言中的結構體, 以花括弧"{}"括起來, 其元素要求為鍵值對, key必須為String類型的, 而value則可為任意類型。 key和value之間以":"表示映射關係, 元素之間也是以逗號分隔。
在eclipse中使用JSONObject需要引用org.json包, 推薦通過maven引用, 溫馨提示:我在構建maven項目的時候屢屢創建失敗, 在網上查了很久還是搞不定, 後來多試幾次才好, 嘗試一下。
如果是在Android Studio中, 則可以直接使用。
2.1 直接構建
JSONObject obj = new JSONObject();obj.put(key, value);直接構建即直接產生實體一個JSONObject物件, 而後調用其put()方法, 將資料寫入。 put()方法的第一個參數為key值, 必須為String類型, 第二個參數為value, 可以為boolean、double、int、long、Object、Map以及Collection等。 當然, double以及int等類型只是在Java中, 寫入到json中時, 統一都會以Number類型存儲。
範例:
import org.json.JSONObject;public class JSONObjectSample { public static void main(String[] args) { createJson(); } private static void createJson() { JSONObject obj = new JSONObject(); obj.put("name", "John"); obj.put("sex", "male"); obj.put("age", 22); obj.put("is_student", true); obj.put("hobbies", new String[] {"hiking", "swimming"}); //調用toString()方法可直接將其內容列印出來 System.out.println(obj.toString()); }}輸出結果為:
這裡可以看到, 為了壓縮大小以便於更高效地傳輸, json把所有空格、分行符號等空白符全部去掉了。 如果想要直觀點看其內容, 可以用一些線上的json解析器查看。
2.2 使用HashMap構建
使用HashMap構建json, 實際上即先創建好一個HashMap物件並且將資料打包進去, 而後在創建JSONObject時將其作為一個參數傳進去。
範例:
public class JSONObjectSample { public static void main(String[] args) { createJsonByMap(); } private static void createJsonByMap() { Map2.3 使用JavaBean構建
相較於前兩種方法, 實際開發中應用JavaBean構建json的情況更為常見, 因為這樣代碼的重用率更高。
範例:
JavaBean:
public class PersonInfo { private String name; private String sex; private int age; private boolean isStudent; private String[] hobbies; public void setName(String name) { this.name = name; } public void setSex(String sex) { this.sex = sex; } public void setAge(int age) { this.age = age; } public void setStudent(boolean isStudent) { this.isStudent = isStudent; } public void setHobbies(String[] hobbies) { this.hobbies = hobbies; } //getter不能少 public String getName() { return name; } public String getSex() { return sex; } public int getAge() { return age; } public boolean isStudent() { return isStudent; } public String[] getHobbies() { return hobbies; }}main:
import org.json.JSONObject;public class JSONObjectSample { public static void main(String[] args) { createJsonByJavaBean(); } private static void createJsonByJavaBean() { PersonInfo info = new PersonInfo(); info.setName("John"); info.setSex("male"); info.setAge(22); info.setStudent(true); info.setHobbies(new String[] {"hiking", "swimming"}); JSONObject obj = new JSONObject(info); System.out.println(obj); }}需要注意一點, JavaBean一定要有getter方法, 否則會無法訪問存儲的資料。
3. 解析json解析json主要是基本類型如Number、boolean等, 與陣列Array。
基本類型的解析直接調用JSONObject物件的getXxx(key)方法, 如果獲取字串則getString(key), 布林值則getBoolean(key), 以此類推。
陣列的解析稍微麻煩一點,
範例:
首先在工程目錄"src/main/java"下創建一個json檔, 用於解析。
demo.json:
{ "hobbies": [ "hiking", "swimming" ], "sex": "male", "name": "John", "is_student": true, "age": 22}在pom.xml中加入對commons-io的依賴, 以便於使用FileUtils進行檔訪問:
主類:
import java.io.File;import java.io.IOException;import org.apache.commons.io.FileUtils;import org.json.JSONArray;import org.json.JSONObject;public class JSONObjectSample { public static void main(String[] args) throws IOException { File file = new File("src/main/java/demo.json"); String content = FileUtils.readFileToString(file); //對基本類型的解析 JSONObject obj = new JSONObject(content); System.out.println("name:" + obj.getString("name")); System.out.println("sex:" + obj.getString("sex")); System.out.println("age" + obj.getInt("age")); System.out.println("is_student" + obj.getBoolean("is_student")); //對陣列的解析 JSONArray hobbies = obj.getJSONArray("hobbies"); System.out.println("hobbies:"); for (int i = 0; i < hobbies.length(); i++) { String s = (String) hobbies.get(i); System.out.println(s); } }}
這裡最後說一句, 歡迎大家到我本人的技術類網站:"技術棧":"www.jishux.com", 來參觀學習呦。