1. JSON简介
1.1 JSON概念
JSON:JavaScriptObject Notation,JS对象简谱,是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。
1.2 JSON语法规则
在JS语言中,一切都是对象。因此,任何支持的类型都可以通过JSON来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型:
- 对象表示为键值对
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
对象:对象在 JS 中是使用花括号 { } 包裹起来的内容,数据结构为 {key1:value1,key2:value2, ...} 的键值对结构。在面向对象的语言中,key 为对象的属性,value 为对应的值。键名可以使用整数和字符串来表示,值的类型可以是任意类型。
数组:数组在 JS 中是使用方括号 [ ] 包裹起来的内容,数据结构为 ["java", "javascript", "vb", ...] 的索引结构。在JS中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引使用得多。同样,值的类型可以是任意类型。
2. 解析JSON
获取JSON对象中的值有如下几种方式:
方式1:使用 Alibaba提供的JSON处理器Fastjson,将JSON字符串转换成JSONObject
Fastjson下载链接:Fastjson ,在网页中选择合适的版本进行下载。
示例:
import com.alibaba.fastjson.JSONObject;
public class JsonTest {
public static void main(String[] args) {
String jsonStr = "{\"error_code\":0,"
+ "\"error_msg\":\"SUCCESS\","
+ "\"log_id\":1345050776428905101,"
+ "\"timestamp\":1557642890,"
+ "\"cached\":0,"
+ "\"result\":{"
+ "\"score\":94.36185455,"
+ "\"face_list\":["
+ "{\"face_token\":\"17611a314e02630b5a4064d7a1307e5a\"},"
+ "{\"face_token\":\"8124c5df8e2908d91dc007214e7d1ee6\"}"
+ "]"
+ "}"
+ "}";
// 将JSON字符串转换成JSON对象
JSONObject jsonObj = JSONObject.parseObject(jsonStr);
// 使用getString()方法,通过String类型的Key获取String类型的Value
System.out.println("error_msg:" + jsonObj.getString("error_msg"));
// 使用get()方法,根据Object类型Key获取Object类型的Value
JSONObject rstObj = (JSONObject) jsonObj.get("result");
System.out.println("score:" + rstObj.getString("score"));
}
}
要点:
parseObject()方法:将String字符串转换成JSONObject;
JSONObject com.alibaba.fastjson.JSON.parseObject(String arg0)
get()方法: 通过Key获取JSONObject中的Object;
Object com.alibaba.fastjson.JSONObject.get(Object key)
getString()方法:通过Key获取JSONObject中的Value;
String com.alibaba.fastjson.JSONObject.getString(String key)
方式2:使用 Alibaba提供的JSON处理器Fastjson,将JSON字符串转换成Java对象
jar包下载方式如方式1所示。
示例:
import com.alibaba.fastjson.JSONObject;
import com.json.entity.JsonBean;
public class JsonTest {
public static void main(String[] args) {
String jsonStr = "{\"error_code\":0,"
+ "\"error_msg\":\"SUCCESS\","
+ "\"log_id\":1345050776428905101,"
+ "\"timestamp\":1557642890,"
+ "\"cached\":0,"
+ "\"result\":{"
+ "\"score\":94.36185455,"
+ "\"face_list\":["
+ "{\"face_token\":\"17611a314e02630b5a4064d7a1307e5a\"},"
+ "{\"face_token\":\"8124c5df8e2908d91dc007214e7d1ee6\"}"
+ "]"
+ "}"
+ "}";
// 将JSON字符串转换成Java类
JsonBean jsonBean = JSONObject.parseObject(jsonStr, JsonBean.class);
// 通过getter方法获取属性值
System.out.println("error_msg:" + jsonBean.getError_msg());
System.out.println("score:" + jsonBean.getResult().getScore());
}
}
上述代码中,JSON字符串对应的Java实体类如下所示:(JsonBean.java、Result.java、Face_list.java)
package com.json.entity;
public class JsonBean {
private int error_code;
private String error_msg;
private long log_id;
private long timestamp;
private int cached;
private Result result;
public void setError_code(int error_code) {
this.error_code = error_code;
}
public int getError_code() {
return error_code;
}
public void setError_msg(String error_msg) {
this.error_msg = error_msg;
}
public String getError_msg() {
return error_msg;
}
public void setLog_id(long log_id) {
this.log_id = log_id;
}
public long getLog_id() {
return log_id;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public long getTimestamp() {
return timestamp;
}
public void setCached(int cached) {
this.cached = cached;
}
public int getCached() {
return cached;
}
public void setResult(Result result) {
this.result = result;
}
public Result getResult() {
return result;
}
}
package com.json.entity;
import java.util.List;
public class Result {
private double score;
private List<Face_list> face_list;
public void setScore(double score) {
this.score = score;
}
public double getScore() {
return score;
}
public void setFace_list(List<Face_list> face_list) {
this.face_list = face_list;
}
public List<Face_list> getFace_list() {
return face_list;
}
}
package com.json.entity;
public class Face_list {
private String face_token;
public void setFace_token(String face_token) {
this.face_token = face_token;
}
public String getFace_token() {
return face_token;
}
}
要点:
parseObject()方法:将String字符串转换成Java实体类
JSONObject com.alibaba.fastjson.JSON.parseObject(String text, Class<T> clazz)
方式3:使用GSON提供的fromJson()方法
GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Json字符转成一个Java对象,或者将一个Java对象转化为Json字符串。
GSON下载链接:GSON ,在网页中选择适合的jar包版本进行下载。
示例:
import com.google.gson.Gson;
import com.json.entity.JsonBean;
public class GsonTest {
public static void main(String[] args) {
String jsonStr = "{\"error_code\":0,"
+ "\"error_msg\":\"SUCCESS\","
+ "\"log_id\":1345050776428905101,"
+ "\"timestamp\":1557642890,"
+ "\"cached\":0,"
+ "\"result\":{"
+ "\"score\":94.36185455,"
+ "\"face_list\":["
+ "{\"face_token\":\"17611a314e02630b5a4064d7a1307e5a\"},"
+ "{\"face_token\":\"8124c5df8e2908d91dc007214e7d1ee6\"}"
+ "]"
+ "}"
+ "}";
Gson gson = new Gson();
JsonBean jsonBean = gson.fromJson(jsonStr, JsonBean.class);
System.out.println("error_msg:" + jsonBean.getError_msg());
System.out.println("score:" + jsonBean.getResult().getScore());
}
}
要点:
fromJson()方法:将JSON字符串转换成Java实体类;
T com.google.gson.Gson.fromJson(String json, Class<T> classOfT)
其它的一些方法:
toJson()方法:将对象转换成String字符串;
String com.google.gson.Gson.toJson(Object src)
toJSONString()方法:将对象转换成String字符串;
String com.alibaba.fastjson.JSON.toJSONString(Object object)
—— END ——