JSON解析

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 ,在网页中选择合适的版本进行下载。

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"));
	}
}
json字符串转JSON对象示例

要点:

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实体类示例

 

上述代码中,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());
	}
}
GSON:JSON字符串转Java实体类示例

要点:

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 ——

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值