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;}}
阅读全文
2 0
- java解析json字符串方法总结
- java 解析 json 字符串
- java解析json字符串
- java解析json字符串
- java解析json字符串
- java解析json字符串
- java解析json字符串
- java json字符串解析
- java 解析json字符串
- java 解析json字符串
- java 解析json字符串
- java解析json字符串
- Java解析Json字符串
- java解析json字符串
- java 解析json字符串
- java解析json字符串
- java 解析json字符串
- java解析json字符串
- 搭建yum源
- Prepare to deploy SharePoint add-in
- java加载.properties配置文件
- Centos配置静态IP及DNS
- 【目录索引】Java多线程部分索引
- java解析json字符串方法总结
- 从 WWDC17 看苹果图形技术的革新
- 复习总结02:Hive
- quarze 时间配置说明
- 64位win7安装32位office导致的没有odbc数据源驱动问题
- iOS开发
- 修改Android关机电量和关机温度 .
- leetcode 15. 3Sum 以及2Sum的问题的处理和求解
- googleplay 内购 In-app Billing php代码