ORG的JSON解析

org解析JSON文件
 *
 * 總結:
 * 1、org中提供了兩個主要的類用來操作json中的對象和數組格式
 * JSONObject對象類和JSONArray數組類
 * 2、json對象和java對象之間可以相互轉換(比較麻煩)
 * 3、解析數據,可以通過json的key值去獲取對應的value值
 *
 * 附註:JSONTokener類可以通過IO流去解析json文件
 * JSONStringer類可以通過字符串的拼接創建json對象或數組,按照key值和value值的順序進行拼接
 *
 * 注意:使用IO流讀取json文件時,一定要設置好讀取的編碼格式,否則有可能出現亂碼
 * 底層如果是數組類型的,不能直接轉換爲JSONObject,否則會顯示{"empty":false};
 */






public class ORGjson {

	public static void main(String[] args) throws Exception {
		/**
		 * --------------1、json對象的使用
		 */
		//創建json對象 
		JSONObject object=new JSONObject();
		
		//添加java的對象,其實是添加對象的toString值
		object.put("student", new Student(1001,"楊鈺瑩",98.7));
		
		//把學生對象轉換爲一個json對象
		JSONObject object2=new JSONObject(new Student(1002,"張曼玉",89.3));
		
		//把json格式的字符串轉換爲json對象
		String json="{\"var\": \"多雲\",\"s2\": \"多雲\",\"f1\": \"duoyun\",\"f2\": \"duoyun\",\"t1\": \"32\",\"t2\": \"24\",\"p1\": \"≤3\",\"p2\": \"≤3\",\"d1\": \"無持續風向\",\"d2\": \"無持續風向\"}";
		JSONObject object3=new JSONObject(json);
		
		//java的map集合轉換爲json對象
		JSONObject object4=new JSONObject(JSONUtil.getMapData());
		
		//根據key值獲取value值
		System.out.println(object4.get("lisi"));
		
		//java的list集合轉換爲json對象
		JSONObject object5=new JSONObject(JSONUtil.getListData());
		//{"empty":false}   底層是數組結構,不能直接轉換爲json的對象
		//System.out.println(object5);
		
		/**
		 * 		----------2、json數組的使用
		 */
		
		//list集合轉換爲json數組
		JSONArray array=new JSONArray(JSONUtil.getListData());
		//獲得json數組中指定位置的對象,第三個...
		//System.out.println(array.get(2));
		
		//獲得json數組中指定位置的對象,需要強轉
		JSONObject object6=(JSONObject) array.get(2);
		//System.out.println(object6);
		
		// 把json對象包裝爲java中的對象,注意:設置對象屬性時,必須一致
		Student student=new Student();
		student.setId(object6.getInt("id"));
		student.setName(object6.getString("name"));
		student.setScore(object6.getDouble("score"));
		//System.out.println(student);
		
		
		/**
		 * 		-------- 3、json本地文件的解析
		 */
		//文件讀取流
		InputStream inputStream=new FileInputStream("data.json");
		//字符讀取流(字節流轉換爲字符流,設置讀取的編碼)
		BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
		
		//JSONTokener對象可以通過IO流解析json文件 
		JSONObject object7=new JSONObject(new JSONTokener(reader));
		
		//根據key值獲取value值,創建一個json對象
		JSONObject object8=object7.getJSONObject("weatherinfo");
		
		//根據key值過去value值
	//	System.out.println(object8.get("city_en"));

	
	
	/**
	 * 	--------  4、解析網絡上的json文件
	 */
	System.out.println("=================================================");
	//網絡鏈接的路徑---字符串
	String url="http://baike.baidu.com/api/openapi/BaikeLemmaCardApi?scope=103&format=json&appid=379020&bk_key=json&bk_length=600";
	
	//獲得json文件的字符串
	String json1=Http1.getHttp(url);

	//解析數據,把字符串轉換爲json對象
	JSONObject jsonObject=new JSONObject(json1);
	
	//獲取(數組類型的數據)     json對象通過key值獲取value值,返回一個json數組
	JSONArray array2=jsonObject.getJSONArray("wapCatalog");
	
	//獲得json數組裏面的指定位置的數據
	System.out.println(array2.get(3));
	
	
	/**
	 * 	 ----------5、 org中的拼接字符串的類
	 */
	
	//創建拼接字符串的json對象
	JSONStringer ss=new JSONStringer();
	
	ss.object();//開v始拼接對象,按照key----value拼接
	ss.key("id");
	ss.value("1001");
	ss.key("name");
	ss.value("劉德華");
	ss.key("sex");
	ss.value("男");
	ss.endObject();//結束拼接對象
	
	
	//拼接數組的    json字符串對象
	JSONStringer stringer=new JSONStringer();
	
	stringer.array();//開始拼接數組
	
	stringer.object();//開v始拼接第1個對象,按照key----value拼接
	stringer.key("id");
	stringer.value("1001");
	stringer.key("name");
	stringer.value("劉德華");
	stringer.key("sex");
	stringer.value("男");
	stringer.endObject();//結束拼接對象
	
	stringer.object();//開v始拼接第2個對象,按照key----value拼接
	stringer.key("id");
	stringer.value("1002");
	stringer.key("name");
	stringer.value("馬德華");
	stringer.key("sex");
	stringer.value("男");
	stringer.endObject();//結束拼接對象
	
	stringer.endArray();//結束拼接數組
	
	System.out.println(stringer.toString());
	


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章