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