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


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