java解析json字符串
📅 2026/7/28 18:57:16
👁️ 阅读次数
📝 编程学习
1、首先依赖的jar包,pom中引入
<groupId>com.huawei</groupId> <artifactId>test</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <!-- 引入json依赖 --> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.7.0</version> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.1</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>net.sf.ezmorph</groupId> <artifactId>ezmorph</artifactId> <version>1.0.3</version> </dependency> </dependencies>2、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 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 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 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().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]; 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 } /** * 根据实体生成字符串 */ 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]; 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); //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); }}
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 List<Cup> 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 List<Cup> getCup() { return cup; } public void setCup(List<Cup> 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; }}
编程学习
技术分享
实战经验