java解析json字符串

java解析json字符串 1、首先依赖的jar包pom中引入groupIdcom.huawei/groupId artifactIdtest/artifactId version1.0-SNAPSHOT/version dependencies !-- 引入json依赖 -- dependency groupIdnet.sf.json-lib/groupId artifactIdjson-lib/artifactId version2.4/version classifierjdk15/classifier /dependency dependency groupIdcommons-beanutils/groupId artifactIdcommons-beanutils/artifactId version1.7.0/version /dependency dependency groupIdcommons-collections/groupId artifactIdcommons-collections/artifactId version3.1/version /dependency dependency groupIdcommons-lang/groupId artifactIdcommons-lang/artifactId version2.5/version /dependency dependency groupIdnet.sf.ezmorph/groupId artifactIdezmorph/artifactId version1.0.3/version /dependency /dependencies2、JsonTest类package com.cc;import net.sf.json.JSONArray;import net.sf.json.JSONObject;import java.util.*;public class JsonTest {public static void main(String[] args) { //生成json字符串 generate(); //待解析字符串 String json {name:zxc,sex:男,job:java}; //解析简单json字符串的三种方法 easy(json); //待解析稍微复杂json字符串 String json2 {name:zxc,sex:男,job:java,data:{chinese:100,math:100,english:100}}; complex(json2); //待解数组形式json字符串 String json3 [{name:z,sex:男,job:java},{name:x,sex:男,job:java},{name:c,sex:男,job:java}]; //解析数组形式字符串 array(json3); //待解析复杂json字符串 String json4 {name:zxc,sex:男,job:java,cup:[{redCup:1,rate:{hg:99%,bhg:98%}},{redCup:2,rate:{hg:99%,bhg:98%}}]}; verycomplex(json4); } /** * 解析稍微复杂json字符串 * param json */ public static void complex(String json){ JSONObject jsonObjectJSONObject.fromObject(json); People people(People)JSONObject.toBean(jsonObject, People.class); System.out.println(解析稍微复杂json字符串:); System.out.println(people.getName()); System.out.println(people.getData().getChinese()); //运行结果: //解析稍微复杂json字符串: //zxc //100 } /** * 解析简单json字符串 * param json */ public static void easy(String json){ //映射实体类解析推荐 JSONObject jsonObject JSONObject.fromObject(json); People people (People) JSONObject.toBean(jsonObject, People.class); System.out.println(根据实体类解析简单json字符串 namepeople.getName() sexpeople.getSex() jobpeople.getJob()); //运行结果根据实体类解析简单json字符串 namezxc sex男 jobjava //不映射实体类根据元素取值 JSONObject jsonOb JSONObject.fromObject(json); String name jsonOb.getString(name); String sex jsonOb.getString(sex); String job jsonOb.getString(job); System.out.println(不映射实体类根据元素取值解析json简单字符串namename sexsex jobjob); //运行结果不映射实体类根据元素取值解析json简单字符串namezxc sex男 jobjava //用迭代器迭代输出 JSONObject jsonObject3 JSONObject.fromObject(json); Iterator keys jsonObject3.keys(); String key null; Object value null; System.out.println(迭代解析json简单字符串); while(keys.hasNext()){ key (String) keys.next(); value jsonObject3.get(key); System.out.println(key:key value:value.toString()); } //运行结果: //迭代解析json简单字符串 //key:sex value:男 //key:name value:zxc //key:job value:java MapString, Object map new HashMapString, Object(); map JSONObject.fromObject(json); System.out.println(map方式解析json简单字符串); System.out.println(map.get(name)); System.out.println(map.get(sex)); System.out.println(map.get(job)); //运行结果: //map方式解析json简单字符串 //zxc //男 //java } /** * 解析复杂json字符串 * param json */ public static void verycomplex(String json){ JSONObject jsonObjectJSONObject.fromObject(json); MapString, Class map new HashMapString, Class(); map.put(cup, Cup.class); People people (People) JSONObject.toBean(jsonObject, People.class, map); //这种方式转成对象people.getCup().get(0).getRedCup()取值时候会报错“ net.sf.ezmorph.bean.MorphDynaBean cannotbe cast to Cup” 所以写了上面三行代码代替这段 //People people(People)JSONObject.toBean(jsonObject, People.class); System.out.println(解析复杂json字符串:); System.out.println(取值people.getName()); System.out.println(取值people.getCup().get(0).getRedCup()); System.out.println(cup长度people.getCup().size()); System.out.println(取值people.getCup().get(0).getRate().getBhg()); //运行结果 //解析复杂json字符串: // 取值zxc // 取值1 // cup长度2 // 取值98% } /** * 解析json数组形式字符串 * param json */ public static void array(String json){ JSONArray jsonArray JSONArray.fromObject(json);// 首先把字符串转成 JSONArray 对象 People[] peo new People[3]; ListPeople list new ArrayListPeople(); //通过实体类 解析成数组 peo (People[]) JSONArray.toArray(jsonArray, People.class);//转换成数组 System.out.println(通过实体类 解析json数组成数组通过下标获取元素peo[0].getName()); //运行结果通过实体类 解析json数组成数组通过下标获取元素z //通过实体类 解析成list(推荐) list (ListPeople) JSONArray.toList(jsonArray, People.class);//转换成列表 for(People p : list){ System.out.println(通过实体类 解析json数组成listp.getName()); } //运行结果 //通过实体类 解析json数组成listz //通过实体类 解析json数组成listx //通过实体类 解析json数组成listc //不映射实体类 直接解析数组形式json字符串 if(jsonArray.size()0){ System.out.println(不映射实体类 直接解析数组形式json字符串:); for(int i0;ijsonArray.size();i){ JSONObject job jsonArray.getJSONObject(i); // 遍历 jsonarray 数组把每一个对象转成 json 对象 System.out.println(job.get(name) job.get(sex) job.get(job)) ; // 得到 每个对象中的属性值 } } //运行结果 //不映射实体类 直接解析数组形式json字符串: // z 男 java // x 男 java // c 男 java } /** * 根据实体生成字符串 */ public static void generate() { //生成简单json字符串 People peo new People(); peo.setJob(java); peo.setName(zxc); peo.setSex(男); String jsonStr JSONObject.fromObject(peo).toString(); System.out.println(根据实体生成json字符串 jsonStr); //运行结果:根据实体生成json字符串 {cup:[],sex:男,name:zxc,data:null,job:java} //通过数组或者列表生成Json字符串 People peo2 new People(); People peo3 new People(); peo2.setName(zxc1); peo2.setSex(男1); peo2.setJob(java1); peo3.setName(zxc1); peo3.setSex(男1); peo3.setJob(java1); People[] pe new People[2]; ListPeople list new ArrayListPeople(); pe[0] peo2; pe[1] peo3; list.add(peo2); list.add(peo3); String jsonStr1 JSONArray.fromObject(pe).toString(); String jsonStr2 JSONArray.fromObject(list).toString(); System.out.println(通过数组生成Json字符串jsonStr1); System.out.println(通过列表生成Json字符串jsonStr2); //Map生成Json字符串 MapString, Object map new HashMapString, Object(); map.put(name, zxc); map.put(sex, 男); map.put(job, java); String jsonStr3 JSONObject.fromObject(map).toString(); System.out.println(map形式数据生成json字符串jsonStr3); }}3、Peope类package com.cc;import java.util.List;public class People {private String Job; private String Name; private String Sex; private Data data; private ListCup cup; public String getName() { return Name; } public void setName(String name) { Name name; } public String getSex() { return Sex; } public void setSex(String sex) { Sex sex; } public String getJob() { return Job; } public void setJob(String job) { Job job; } public Data getData() { return data; } public void setData(Data data) { this.data data; } public ListCup getCup() { return cup; } public void setCup(ListCup cup) { this.cup cup; }}4、Cup类package com.cc;public class Cup {private String redCup;private Rate rate;public String getRedCup() { return redCup; } public void setRedCup(String redCup) { this.redCup redCup; } public Rate getRate() { return rate; } public void setRate(Rate rate) { this.rate rate; }}5、Data类package com.cc;public class Data {private String chinese; private String math; private String english; public String getChinese() { return chinese; } public void setChinese(String chinese) { this.chinese chinese; } public String getMath() { return math; } public void setMath(String math) { this.math math; } public String getEnglish() { return english; } public void setEnglish(String english) { this.english english; }}6、Rate类package com.cc;public class Rate {private String hg;private String bhg;public String getHg() { return hg; } public void setHg(String hg) { this.hg hg; } public String getBhg() { return bhg; } public void setBhg(String bhg) { this.bhg bhg; }}