Java基础-处理json字符串解析案例

                                  作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

  作为一名开发人员,想必大家或多或少都有接触到XML文件,XML全称为“extensible markup language”,即可扩展性标记语言。它由于可读性很好,但是在网络传输上,这种数据格式往往很占用带宽等诸多缺点,因此就诞生了Json,它比XML数据更小、更快、更容易解析。数据由名称-值 对表示,由逗号分隔开,花括号保存对象,方括号保存数组。Json值可以是:数字/字符串/逻辑值/数组/对象/null。

  接下来我们就一起看看如何创建一个json文件以及如何解析json文件。

一.java自定义对象对象和json字符串的互转

1>.添加Maven依赖(添加最后一个依赖json即可)

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>groupId</groupId>
<artifactId>MyHadoop</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.3</version>
</dependency> <!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.17</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency> </dependencies> </project>

2>.具体实现代码如下:

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.json; public class Teacher {
private String name;
private int age; public Teacher(String name, int age) {
this.name = name;
this.age = age;
} public Teacher() {
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String toString() {
return "Teacher{" + "name='" + name + ", age=" + age + '}';
}
}

Teacher.java 文件内容

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.json; import com.alibaba.fastjson.JSONObject; import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; public class JsonOperation {
public static final String filePath = "D:\\10.Java\\IDE\\yhinzhengjieData\\MyHadoop\\JSON\\teacher.txt"; public static void main(String[] args) throws Exception {
generatingJSON();
System.out.println("=============我是分割线=============");
parsingJSON();
}
//生成json文本
private static void generatingJSON() throws IOException {
Teacher yzj = new Teacher("尹正杰", 18);
String json = JSONObject.toJSONString(yzj);
System.out.println(json);
FileOutputStream fos = new FileOutputStream(filePath);
byte[] buf = new byte[1024];
fos.write(json.getBytes());
fos.close();
} //解析json文本
private static void parsingJSON() throws IOException {
byte[] buf = new byte[1024];
FileInputStream fis = new FileInputStream(filePath);
//由于我的文件较小,为了实验方便我就一次性读取出来了
JSONObject json = JSONObject.parseObject( new String(buf,0,fis.read(buf)));
System.out.println(json);
}
} /*
以上代码执行结果如下:
{"age":18,"name":"尹正杰"}
=============我是分割线=============
{"name":"尹正杰","age":18}
*/

二.Java数据类型和Json互相转换案例

以下是list和json字符串的互转,当然,map的转换json和其方法类似,我这里就不多举例了:

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.json; public class Teacher {
private String name;
private int age; public Teacher(String name, int age) {
this.name = name;
this.age = age;
} public Teacher() {
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String toString() {
return "Teacher{" + "name='" + name + ", age=" + age + '}';
}
}

Teacher.java 文件内容

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.json; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import java.util.ArrayList;
import java.util.List; public class JsonOperation { public static void main(String[] args) throws Exception {
listToJSON();
System.out.println("=============我是分割线=============");
jsonToList();
}
public static void listToJSON(){
Teacher yzj = new Teacher("尹正杰",18);
Teacher yzj1 = new Teacher("yinzhengjie",19);
Teacher yzj2 = new Teacher("YINZHENGJIE",20);
List<Teacher> lists=new ArrayList<Teacher>();
lists.add(yzj);
lists.add(yzj1);
lists.add(yzj2);
String listArray=JSONArray.toJSONString(lists);
System.out.println("arrayList:"+listArray);
} public static void jsonToList(){
String str ="{\"names\":[\"尹正杰\",\"yinzhengjie\"]}";
JSONObject jo = JSON.parseObject(str);
JSONArray jsonArray = jo.getJSONArray("names");
for (Object o : jsonArray) {
System.out.println(o.toString());
}
}
} /*
以上代码执行结果如下:
arrayList:[{"age":18,"name":"尹正杰"},{"age":19,"name":"yinzhengjie"},{"age":20,"name":"YINZHENGJIE"}]
=============我是分割线=============
尹正杰
yinzhengjie
*/

三.小试牛刀

  是不是觉得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}
 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.json; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import java.util.ArrayList;
import java.util.List; public class JsonOperation { public static void main(String[] args) throws Exception {
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}";
List<String> taggen = taggen(comment);
for (String s : taggen) {
System.out.println(s);
} }
/**
* 解析商家评论数据
*/
public static List<String> taggen(String comment){
JSONObject jo = JSON.parseObject(comment);
JSONArray jArray = jo.getJSONArray("extInfoList");
if(jArray != null && jArray.size() != 0){
List<String> list = new ArrayList<String>();
//通过jArray得到第一个json串,作为json对象
JSONObject jo2 = jArray.getJSONObject(0);
JSONArray jArray2 = jo2.getJSONArray("values");
if(jArray2 != null && jArray2.size() != 0){
for (Object o : jArray2) {
//System.out.println(o.toString());
list.add(o.toString());
}
return list;
}
}
return null;
}
} /*
以上代码执行结果如下:
环境优雅
性价比高
干净卫生
停车方便
音响效果好
*/

Java基础-处理json字符串解析案例的更多相关文章

  1. Java基础97 json插件的使用(java对象和json字符串对象之间的转换)

    1.需要用到的包 2.实例 实体类 people package com.shore.entity; /** * @author DSHORE/2019-4-19 * */ public class ...

  2. IT兄弟连 JavaWeb教程 AJAX以及JSON字符串经典案例

    案例需求:客户端发送AJAX请求服务器端获取用户信息的数据. 案例实现: 在服务器端要将Java对象转换成JSON字符串,如果使用拼接JSON字符串的方式非常繁琐,并且非常容易出错,所以一般会借助第三 ...

  3. Java基础-零拷贝技术应用案例

    Java基础-零拷贝技术应用案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 零拷贝技术在Hadoop生态圈中很多组件得到应用,典型的比如kafka组件,它就很成功的应用了零拷贝 ...

  4. java对象转为json字符串

    1.使用fastjson开源json工具类库 2.java类未添加get()和set()方法,java对象初始化时,使用fastjson解析,得到的json字符串有时为空{} 3.Java对象转为js ...

  5. Java对象与Json字符串的转换

    Java对象与Json字符串的转换 JSON是一种轻量级的数据交换格式,常用于前后端的数据交流 后端 : 前端 Java对象 > JsonString Java对象 < jsonStrin ...

  6. JackSon将java对象转换为JSON字符串

    JackSon可以将java对象转换为JSON字符串,步骤如下: 1.导入JackSon 的jar包 2.创建ObjectMapper对象 3.使用ObjectMapper对象的writeValueA ...

  7. java对象与Json字符串之间的转化(fastjson)

    1. 首先引入jar包 在pom.xml文件里加入下面依赖: <dependency> <groupId>com.alibaba</groupId> <art ...

  8. (后端)JackSon将java对象转换为JSON字符串(转)

    转载小金金金丶园友: JackSon可以将java对象转换为JSON字符串,步骤如下: 1.导入JackSon 的jar包 2.创建ObjectMapper对象 3.使用ObjectMapper对象的 ...

  9. 前台的js对象数组传到后台处理。在前台把js对象数组转化为json字符串,在后台把json字符串解析为List<>

    前台的js对象数组传到后台处理.在前台把js对象数组转化为json字符串,在后台把json字符串解析为List<>

随机推荐

  1. idea java方法中 传多个参数对象 的复制粘贴快速处理方法

    比如像这种的传多个参数对象,我是直接复制过来,然后把第一个字母改成大写,然后后面的实例对象敲一个第一个字符的小写,回车就直接出来了 在写调用参数的地方,ctrl+p 调出提示,然后按下提示里的实例的第 ...

  2. [BZOJ1135][POI2009]Lyz[霍尔定理+线段树]

    题意 题目链接 分析 这个二分图匹配模型直接建图的复杂度太高,考虑霍尔定理. 对于某些人组成的区间,我们只需要考虑他们的并是一段连续的区间的集合.更进一步地,我们考虑的人一定是连续的. 假设我们考虑的 ...

  3. Vue全家桶介绍

    一直不清楚全家桶是什么玩意,上网搜了一下,才知道就是平时项目中使用的几个依赖包,下面分享一下 Vue 全家桶介绍 Vue有著名的全家桶系列,包含了vue-router(http://router.vu ...

  4. 分布式理论:深入浅出Paxos算法

    前言 Paxos算法是用来解决分布式系统中,如何就某个值达成一致的算法.它晦涩难懂的程度完全可以跟它的重要程度相匹敌.目前关于paxos算法的介绍已经非常多,但大多数是和稀泥式的人云亦云,却很少有人能 ...

  5. 06-docker组件如何协作

    容器启动过程如下: Docker 客户端执行 docker run 命令. Docker daemon 发现本地没有 httpd 镜像. daemon 从 Docker Hub 下载镜像. 下载完成, ...

  6. 区块链扩容方案之Gas值限制

    区块链扩容一直是区块链团队的重点研究方向.因为比特币对区块大小的设定是固定的,而且中本聪将最初大小值限定为1M,但随着交易量的增加,网络拥堵情况也愈渐严重,最终也导致了比特币的分叉. 区别于比特币固定 ...

  7. 2. Python3 基础入门

    Python3 基础入门 编码 在python3中,默认情况下以UTF-8编码.所有字符串都是 unicode 字符串,当然也可以指定不同编码.体验过2.x版本的编码问题,才知道什么叫难受. # -* ...

  8. NS2安装过程中环境变量设置的问题(ns-2.35)

    nam: Can't find a usable tk.tcl in the following directories: */ns-allinone-2.35/tcl8.5.10/library/t ...

  9. 每日scrum(5)

    进入冲刺第五天,软件的界面设计成为主打,收集学校的很多美图是我们组的任务: 问题在于软件已很难有很大的改进,大方向也都是变不了的 任务看板: 燃尽图:

  10. Navicat连接Mysql8.0失败:Client does not support authentication protocol requested by server...

    今天Mysql服务无法启动,看着网上的教程稀里糊涂的就用命令mysqld --initialize给初始化了,结果就是以前的表都没了,重新安装后,Navicat无法连接数据库 解决方法如下: 意思是直 ...