Java基础-处理json字符串解析案例
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
作为一名开发人员,想必大家或多或少都有接触到XML文件,XML全称为“extensible markup language”,即可扩展性标记语言。它由于可读性很好,但是在网络传输上,这种数据格式往往很占用带宽等诸多缺点,因此就诞生了Json,它比XML数据更小、更快、更容易解析。数据由名称-值 对表示,由逗号分隔开,花括号保存对象,方括号保存数组。Json值可以是:数字/字符串/逻辑值/数组/对象/null。
接下来我们就一起看看如何创建一个json文件以及如何解析json文件。
一.java自定义对象对象和json字符串的互转
1>.添加Maven依赖(添加最后一个依赖json即可)
1 <?xml version="1.0" encoding="UTF-8"?>
2
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5 4.0.0
6
7 groupId
8 MyHadoop
9 1.0-SNAPSHOT
10
11
12
13 org.apache.hadoop
14 hadoop-client
15 2.7.3
16
17
18
19
20 junit
21 junit
22 4.12
23 test
24
25
26
27 mysql
28 mysql-connector-java
29 5.1.17
30
31
32 com.alibaba
33 fastjson
34 1.2.47
35
36
37
38
39
2>.具体实现代码如下:
1 /*
2 @author :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
4 EMAIL:y1053419035@qq.com5 */
6 packagecn.org.yinzhengjie.json;7
8 public classTeacher {9 privateString name;10 private intage;11
12 public Teacher(String name, intage) {13 this.name =name;14 this.age =age;15 }16
17 publicTeacher() {18 }19
20 publicString getName() {21 returnname;22 }23
24 public voidsetName(String name) {25 this.name =name;26 }27
28 public intgetAge() {29 returnage;30 }31
32 public void setAge(intage) {33 this.age =age;34 }35
36 publicString toString() {37 return "Teacher{" + "name='" + name + ", age=" + age + '}';38 }39 }
Teacher.java 文件内容
1 /*
2 @author :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
4 EMAIL:y1053419035@qq.com5 */
6 packagecn.org.yinzhengjie.json;7
8 importcom.alibaba.fastjson.JSONObject;9
10 importjava.io.FileInputStream;11 importjava.io.FileOutputStream;12 importjava.io.IOException;13
14 public classJsonOperation {15 public static final String filePath = "D:\\10.Java\\IDE\\yhinzhengjieData\\MyHadoop\\JSON\\teacher.txt";16
17 public static void main(String[] args) throwsException {18 generatingJSON();19 System.out.println("=============我是分割线=============");20 parsingJSON();21 }22 //生成json文本
23 private static void generatingJSON() throwsIOException {24 Teacher yzj = new Teacher("尹正杰", 18);25 String json =JSONObject.toJSONString(yzj);26 System.out.println(json);27 FileOutputStream fos = newFileOutputStream(filePath);28 byte[] buf = new byte[1024];29 fos.write(json.getBytes());30 fos.close();31 }32
33 //解析json文本
34 private static void parsingJSON() throwsIOException {35 byte[] buf = new byte[1024];36 FileInputStream fis = newFileInputStream(filePath);37 //由于我的文件较小,为了实验方便我就一次性读取出来了
38 JSONObject json = JSONObject.parseObject( new String(buf,0,fis.read(buf)));39 System.out.println(json);40 }41 }42
43
44
45
46 /*
47 以上代码执行结果如下:48 {"age":18,"name":"尹正杰"}49 =============我是分割线=============50 {"name":"尹正杰","age":18}51 */
二.Java数据类型和Json互相转换案例
以下是list和json字符串的互转,当然,map的转换json和其方法类似,我这里就不多举例了:
1 /*
2 @author :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
4 EMAIL:y1053419035@qq.com5 */
6 packagecn.org.yinzhengjie.json;7
8 public classTeacher {9 privateString name;10 private intage;11
12 public Teacher(String name, intage) {13 this.name =name;14 this.age =age;15 }16
17 publicTeacher() {18 }19
20 publicString getName() {21 returnname;22 }23
24 public voidsetName(String name) {25 this.name =name;26 }27
28 public intgetAge() {29 returnage;30 }31
32 public void setAge(intage) {33 this.age =age;34 }35
36 publicString toString() {37 return "Teacher{" + "name='" + name + ", age=" + age + '}';38 }39 }
Teacher.java 文件内容
1 /*
2 @author :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
4 EMAIL:y1053419035@qq.com5 */
6 packagecn.org.yinzhengjie.json;7
8 importcom.alibaba.fastjson.JSON;9 importcom.alibaba.fastjson.JSONArray;10 importcom.alibaba.fastjson.JSONObject;11
12 importjava.util.ArrayList;13 importjava.util.List;14
15 public classJsonOperation {16 17
18 public static void main(String[] args) throwsException {19 listToJSON();20 System.out.println("=============我是分割线=============");21 jsonToList();22 }23 public static voidlistToJSON(){24 Teacher yzj = new Teacher("尹正杰",18);25 Teacher yzj1 = new Teacher("yinzhengjie",19);26 Teacher yzj2 = new Teacher("YINZHENGJIE",20);27 List lists=new ArrayList();28 lists.add(yzj);29 lists.add(yzj1);30 lists.add(yzj2);31 String listArray=JSONArray.toJSONString(lists);32 System.out.println("arrayList:"+listArray);33 }34
35 public static voidjsonToList(){36 String str ="{\"names\":[\"尹正杰\",\"yinzhengjie\"]}";37 JSONObject jo =JSON.parseObject(str);38 JSONArray jsonArray = jo.getJSONArray("names");39 for(Object o : jsonArray) {40 System.out.println(o.toString());41 }42 }43 }44
45 /*
46 以上代码执行结果如下:47 arrayList:[{"age":18,"name":"尹正杰"},{"age":19,"name":"yinzhengjie"},{"age":20,"name":"YINZHENGJIE"}]48 =============我是分割线=============49 尹正杰50 yinzhengjie51 */
三.小试牛刀
是不是觉得json处理其实蛮简单的,不是吗?接下来我们来练习以下,解析以下的字符串:需要解析商家评论数据:
{"reviewPics":null,"extInfoList":[{"title":"contentTags","values":["环境优雅","性价比高","干净卫生","停车方便","音响效果好"],"desc":"","defineType":0},{"title":"tagIds","values":["24","300","852","506","173"],"desc":"","defineType":0}],"expenseList":null,"reviewIndexes":[2],"scoreList":null}
1 /*
2 @author :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
4 EMAIL:y1053419035@qq.com5 */
6 packagecn.org.yinzhengjie.json;7
8 importcom.alibaba.fastjson.JSON;9 importcom.alibaba.fastjson.JSONArray;10 importcom.alibaba.fastjson.JSONObject;11
12 importjava.util.ArrayList;13 importjava.util.List;14
15 public classJsonOperation {16 17
18 public static void main(String[] args) throwsException {19 String comment = "{\"reviewPics\":null,\"extInfoList\":[{\"title\":\"contentTags\",\"values\":[\"环境优雅\",\"性价比高\",\"干净卫生\",\"停车方便\",\"音响效果好\"],\"desc\":\"\",\"defineType\":0},{\"title\":\"tagIds\",\"values\":[\"24\",\"300\",\"852\",\"506\",\"173\"],\"desc\":\"\",\"defineType\":0}],\"expenseList\":null,\"reviewIndexes\":[2],\"scoreList\":null}";20 List taggen =taggen(comment);21 for(String s : taggen) {22 System.out.println(s);23 }24
25 }26 /**
27 * 解析商家评论数据28 */
29 public static Listtaggen(String comment){30 JSONObject jo =JSON.parseObject(comment);31 JSONArray jArray = jo.getJSONArray("extInfoList");32 if(jArray != null && jArray.size() != 0){33 List list = new ArrayList();34 //通过jArray得到第一个json串,作为json对象
35 JSONObject jo2 = jArray.getJSONObject(0);36 JSONArray jArray2 = jo2.getJSONArray("values");37 if(jArray2 != null && jArray2.size() != 0){38 for(Object o : jArray2) {39 //System.out.println(o.toString());
40 list.add(o.toString());41 }42 returnlist;43 }44 }45 return null;46 }47 }48
49 /*
50 以上代码执行结果如下:51 环境优雅52 性价比高53 干净卫生54 停车方便55 音响效果好56 */
”