java解析json字符串方法总结

来源:互联网 发布:小米授权淘宝网店 编辑:程序博客网 时间:2024/06/06 08:55

java解析json字符串方法总结

测试方法:

package json;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import net.sf.json.JSONArray;import net.sf.json.JSONObject;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);}/** * 根据实体生成字符串 */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");       /* //增加data属性    Fraction fa = new Fraction();    fa.setChinese("100");    peo2.setData(fa);*/        peo3.setName("zxc1");    peo3.setSex("男1");    peo3.setJob("java1");        People[] pe = new People[2];        List<People> list = new ArrayList<People>();        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);        //运行结果:        //通过数组生成Json字符串:[{"cup":[],"sex":"男1","name":"zxc1","data":null,"job":"java1"},{"cup":[],"sex":"男1","name":"zxc1","data":null,"job":"java1"}]        //通过列表生成Json字符串:[{"cup":[],"sex":"男1","name":"zxc1","data":null,"job":"java1"},{"cup":[],"sex":"男1","name":"zxc1","data":null,"job":"java1"}]                //Map生成Json字符串        Map<String, Object> map = new HashMap<String, Object>();        map.put("name", "zxc");        map.put("sex", "男");        map.put("job", "java");        String jsonStr3 = JSONObject.fromObject(map).toString();        System.out.println("map形式数据生成json字符串"+jsonStr3);        //运行结果:map形式数据生成json字符串{"sex":"男","name":"zxc","job":"java"}}/** * 解析简单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字符串 :name="+people.getName()+"  sex="+people.getSex()+"  job="+people.getJob());    //运行结果:根据实体类解析简单json字符串 :name=zxc  sex=男  job=java        //不映射实体类,根据元素取值    JSONObject jsonOb = JSONObject.fromObject(json);    String name = jsonOb.getString("name");        String sex = jsonOb.getString("sex");        String job = jsonOb.getString("job");        System.out.println("不映射实体类,根据元素取值解析json简单字符串:name="+name+"  sex="+sex+"  job="+job);        //运行结果:不映射实体类,根据元素取值解析json简单字符串:name=zxc  sex=男  job=java                //用迭代器迭代输出        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                Map<String, Object> map = new HashMap<String, 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 complex(String json){JSONObject jsonObject=JSONObject.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 verycomplex(String json){JSONObject jsonObject=JSONObject.fromObject(json);Map<String, Class> map = new HashMap<String, 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().get("bhg"));//运行结果://解析复杂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];        List<People> list = new ArrayList<People>();        //通过实体类 解析成数组        peo = (People[]) JSONArray.toArray(jsonArray, People.class);//转换成数组        System.out.println("通过实体类 解析json数组成数组通过下标获取元素:"+peo[0].getName());        //运行结果:通过实体类 解析json数组成数组通过下标获取元素:z                //通过实体类 解析成list(推荐)        list = (List<People>) JSONArray.toList(jsonArray, People.class);//转换成列表        for(People p : list){        System.out.println("通过实体类 解析json数组成list:"+p.getName());        }        //运行结果:        //通过实体类 解析json数组成list:z        //通过实体类 解析json数组成list:x        //通过实体类 解析json数组成list:c                        //不映射实体类  直接解析数组形式json字符串if(jsonArray.size()>0){System.out.println("不映射实体类  直接解析数组形式json字符串:");  for(int i=0;i<jsonArray.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}}

People:

package json;import java.util.List;public class People {private String name;private String sex;private String job;private Fraction data;private List<Cup> cup;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getJob() {return job;}public void setJob(String job) {this.job = job;}public Fraction getData() {return data;}public void setData(Fraction data) {this.data = data;}public List<Cup> getCup() {return cup;}public void setCup(List<Cup> cup) {this.cup = cup;}}
Fraction:

package json;public class Fraction {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;}}

Cup:

package json;import java.util.Map;public class Cup {private String redCup;private String whiteCup;private Map<String, String> rate;public String getRedCup() {return redCup;}public void setRedCup(String redCup) {this.redCup = redCup;}public String getWhiteCup() {return whiteCup;}public void setWhiteCup(String whiteCup) {this.whiteCup = whiteCup;}public Map<String, String> getRate() {return rate;}public void setRate(Map<String, String> rate) {this.rate = rate;}}


原创粉丝点击