1. 程式人生 > >java 中十六進位制轉換為字串,java GSON-JSON解析。

java 中十六進位制轉換為字串,java GSON-JSON解析。

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

兩種方式各有優劣,在需要用的屬性少的時候適合第二種方式,否則適合第一種方式。