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());