java 中十六進位制轉換為字串,java GSON-JSON解析。
阿新 • • 發佈:2019-02-08
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"
}
}
方式一(建立一個對映類):
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
兩種方式各有優劣,在需要用的屬性少的時候適合第二種方式,否則適合第一種方式。