private void ceshi() {
String data = "600000343555031374432354230307B22616464496E666F223A7B227265737" +
"56C745F636F6465223A222D31222C226572725F636F6465223A224E4545445F524556455253414C222C226572725F6D7367223A2265786368616E67652063757073206572726F72227D7D";
data = data.substring(data.indexOf("7B22"), data.length());//截取字符串
Log.d("zfr_data:", data);
data = toStringHex(data);//十六进制转字符串 //{"addInfo":{"result_code":"-1","err_code":"NEED_REVERSAL","err_msg":"exchange cups error"}}
Log.d("zfr_data1:", data);
JsonObject jsonObject = (JsonObject) new JsonParser().parse(data);//GSON解析
Log.d("zfr_addInfo:", jsonObject.get("addInfo").getAsJsonObject().get("err_code").getAsString());
}
/**
* 十六进制字符串转换字符串
* 35353637 ==> 5567
*
* @return String
*/
public static String toStringHex(String s) {
byte[] baKeyword = new byte[s.length() / 2];
for (int i = 0; i < baKeyword.length; i++) {
try {
baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(
i * 2, i * 2 + 2), 16));
} catch (Exception e) {
e.printStackTrace();
}
}
try {
s = new String(baKeyword, "utf-8");// UTF-16le:Not
} catch (Exception e1) {
e1.printStackTrace();
}
return s;
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
0x00 前言
目前网络上有很多接口是Json形式的,Gson是谷歌开源的Json解析库,可以方便的将Java对象转换成Json字符串,也可以方便的将Json字符串转换成Java对象。
0x01 两种解析Json字符串方式
假设我们要解析的字符串是如下字符串:
{
"rst": 0,
"msg": "ok",
"data": {
"cookie": "JSESSIONID=abcntKeuJhop56LGykfdw"
}
}
方式一(建立一个映射类):
针对如上的数据:
https://www.bejson.com/json2javapojo/new/
我们可以手动建立如下的类或者访问以上的链接建立如下Java实体类:
JsonRootBean.java
public class JsonRootBean {
private int rst;
private String msg;
private Data data;
public void setRst(int rst) {
this.rst = rst;
}
public int getRst() {
return rst;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getMsg() {
return msg;
}
public void setData(Data data) {
this.data = data;
}
public Data getData() {
return data;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
Data.java
public class Data {
private String cookie;
public void setCookie(String cookie) {
this.cookie = cookie;
}
public String getCookie() {
return cookie;
}
}
主类:Main.java
String json = "{\n" +
" \"rst\": 0,\n" +
" \"msg\": \"ok\",\n" +
" \"data\": {\n" +
" \"cookie\": \"JSESSIONID=abcntKeuJhop56LGykfdw\"\n" +
" }\n" +
"}";
JsonRootBean jsonRootBean = new Gson().fromJson(json, JsonRootBean.class);
System.out.println("rst:" + jsonRootBean.getRst());
System.out.println("msg:" + jsonRootBean.getMsg());
System.out.println("data:" + jsonRootBean.getData().getCookie());
结果
rst:0
msg:ok
data:JSESSIONID=abcntKeuJhop56LGykfdw
方式二(直接访问):
主类:Main.java
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class Main {
public static void main(String[] args) {
String json = "{\n" +
" \"rst\": 0,\n" +
" \"msg\": \"ok\",\n" +
" \"data\": {\n" +
" \"cookie\": \"JSESSIONID=abcntKeuJhop56LGykfdw\"\n" +
" }\n" +
"}";
JsonObject jsonObject = (JsonObject) new JsonParser().parse(json);
System.out.println("rst:" + jsonObject.get("rst").getAsInt());
System.out.println("msg:" + jsonObject.get("msg").getAsString());
System.out.println("data:" + jsonObject.get("data").getAsJsonObject().get("cookie").getAsString());
}
}
结果
rst:0
msg:ok
data:JSESSIONID=abcntKeuJhop56LGykfdw
两种方式各有优劣,在需要用的属性少的时候适合第二种方式,否则适合第一种方式。
注:如有问题可以回复,看到第一时间分析解决,码农不易,感觉对您有用,帮助到您,可否打赏一杯可乐,在此谢过诸位,愿诸君终成大神,前程似锦~~~