当前位置: 首页 > news >正文

java解析json字符串

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; }

}

http://www.jsqmd.com/news/1282334/

相关文章:

  • AI Agent驱动空间研究成果智能生产——以空间数据为载体、以论文写作为目标的空间选题论证·Codex分析工程·五维质量审查·GIS专业制图与论文图组全链路技术实践
  • 基于Centos+uWSGI+Nginx部署Django项目(过程非常详细)
  • 2026苏州名包回收全攻略:闲置爱马仕、香奈儿、LV怎么卖最划算?手把手教你避坑变现 - 肉松卷
  • 记一次 .NET 某人力资源网 CPU爆高分析
  • CSS-笔记1-选择器与文本元素
  • 如何创建.babelrc文件?
  • 线代之光:特征值与特征向量的理论、工程意义与 Python 实战
  • 在昆明卖黄金别盲目!先熔金套路深度拆解,2026正规无损验金流程看这里 - 商业每日快报
  • Notes on Thinking in Java
  • 哪个法硕刷题App最专业?实测5款,第一名实至名归 - 资讯在线
  • AI副业时间管理实战手册(从混乱到日入500+的7步闭环):基于2147位副业者行为数据的精准复盘
  • 高效知识吸收体系:第二周学习框架与实操指南
  • 计算机毕业设计之基于SpringBoot的贷款审批系统
  • 高性价比大型新能源SUV怎么选?从保值残值+购车权益双维度选购指南 - 资讯在线
  • Spring 事务
  • 苏州代账公司怎么选——从资质到流程的多维对照 - 资讯在线
  • cf----2019-09-01( Appending Mex,Changing Array,Candies Distribution)
  • 星巴克双赛事体育营销策略与执行全解析
  • 问题解决方案之VC++
  • 半导体抛售潮下,SK海力士股价暴跌,AI芯片上涨行情能否持续引质疑?
  • 5分钟实现网页视频自由下载:VideoDownloadHelper完整技术解析与实战指南
  • 济南名包回收哪家店出价高?成色/附件/热门款对回收价格的影响全解析 - 二奢分享官
  • 广州夏令营:军博营地专业严谨 - 17728098551
  • 物联网设备初级电池寿命延长技术与NBM7100A方案解析
  • 2026年广东口碑好的精密cnc加工工厂推荐:谁解精度痛点? - 变量人生001
  • 滨州环保设备水帘厂家哪家好?2026避坑指南:4个坑+5条硬标准,帮你绕开90%的坑 - GEO99
  • 为什么你学了AI却用不起来?揭秘普通人落地失败的3个隐形陷阱(附避坑清单)
  • 龍魂系统 · 三国谋士多维度推演报告 基于《三国志》正史数据 | 非演义美化 | 非文学滤镜
  • Plus one (66)
  • Avidemux2:开源视频编辑器的完整指南与专业技巧