web传输数据目前比较流行的是json格式了,那么如何使用java将json数据解析出来呢?
JSON数据示例一: 这个案例中,顶层是对象,既有基本数据类型的,又有对象和数组类型的数据。
{
"code":0,
"msg":"查询用户信息" ,
"user":{
"id":12,
"name":"Herrona"
},
"list":[
{
"id":1,
"name":"yg"
},
{
"id":2,
"name":"yf"
}]
}
JSON数据示例二:顶层是数组类型。
[
{
"name":"yg",
"id":1
},
{
"name":"yf",
"id":2
}
]
对于以上两个示例我们应该如何解析呢?
首先如果是maven项目的话,在POM.xml中引入fastjson依赖:
<!-- JSON 开始 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.5</version>
</dependency>
<!-- json结束 -->
解析示例代码如下:
package json;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
/**
* Title: FastJsonTest
* Description: JSON数据解析示例
* @author Herrona
*/
public class FastJsonTest {
public static void main(String[] args) {
parse();
tojson();
parseArray();
}
/**
* 解析json数据
*/
static void parse(){
//JSON对象通常被序列化,也就是字符串形式
String jsonstr = "{code:0,msg:'查询用户信息' , user:{id:12,name:'Herrona'},list:[{id:1,name:'yg'},{id:2,name:'yf'}]}";
//最顶层的JSON对象
JSONObject root = JSONObject.parseObject(jsonstr);
System.out.println("json数据:"+root);
//获得整型数据
int code = root.getInteger("code");
//获得字符串型数据
String msg = root.getString("msg");
System.out.println("代码:"+code);
System.out.println("消息:"+msg);
//获得对象
JSONObject user = root.getJSONObject("user");
System.out.println("学号:" + user.getInteger("id"));
System.out.println("姓名:" + user.getString("name"));
//获得数组类型的属性
JSONArray list = root.getJSONArray("list");
//遍历数组
for(int i=0;i<list.size();i++) {
JSONObject obj = (JSONObject) list.get(i);
System.out.print("账号:"+obj.getIntValue("id")+"\t");
System.out.println("姓名:"+obj.getString("name"));
}
}
/**
* 将某java对象转换为json对象
*/
static void tojson(){
User user = new User();
user.setId(12);
user.setName("Herrona");
List<User> list = new ArrayList<>();
list.add(new User(1,"yg"));
list.add(new User(2,"yf"));
System.out.println("将java对象转换为json对象:"+JSON.toJSON(user));
System.out.println("将java对象列表转换为json对象:"+JSON.toJSON(list));
}
/**
* 解析数组类型
*/
static void parseArray() {
String jsonstr = "[{'name':'yg','id':1},{'name':'yf','id':2}]";
//顶层是数组
JSONArray arr = JSON.parseArray(jsonstr);
//遍历数组
for(int i=0;i<arr.size();i++) {
JSONObject obj = (JSONObject) arr.get(i);
System.out.print("账号:"+obj.getIntValue("id")+"\t");
System.out.println("姓名:"+obj.getString("name"));
}
//已知元素类型
List<User> list = JSON.parseArray(jsonstr,User.class);//第二个参数指定元素类型
for(User user : list) {
System.out.println(user);
}
}
}
/**
* Title: User
* Description: 用户对象
* @author Herrona
*/
class User {
private Integer id;
private String name;
public User() {
}
public User(Integer id, String name) {
super();
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "学号:" + id + "\t姓名:" + name;
}
}