使用Java中的Gson解析来自HTTP请求的JSON响应

时间:2019-05-23 18:54:15

标签: java json http parsing gson

我正在尝试从URL中读取以下json输出

{
    "error": false,
    "status": 200,
    "message": "License Key activated successfully.",
    "data": {
        "expire": 1582657054,
        "activation_id": 1519628117,
        "expire_date": "2020-02-25 18:57",
        "timezone": "UTC",
        "the_key": "Cqu62al903ICv40am9nM68Y7o9-32",
        "url": "http://domain/my-account/view-license-key/?key=test-32",
        "has_expired": false,
        "status": "active",
        "allow_offline": true,
        "offline_interval": "days",
        "offline_value": 1,
        "downloadable": {
            "name": "v1.1.5",
            "url": "https://domain/product-1.1.5.zip"
        },
        "ctoken": "dsfejk8989"
    }
}

我试图同时获得两个值“状态:200”和“ activation_id”。

我尝试过在线查找和解析。似乎没有任何作用。我对整个json阅读有点陌生。

try {
    JSONParser jsonParser = new JSONParser();

    String jsonS = "";
    URL url = new URL(link);
    URLConnection conn = url.openConnection();
    conn.connect();
    BufferedReader in = new BufferedReader(new InputStreamReader(
            conn.getInputStream()));
    String inputLine;
    while ((inputLine = in.readLine()) != null) {
        jsonS += inputLine;
    }

    Gson gson = new Gson();
    JsonObject jsonObject = gson.fromJson(jsonS, JsonObject.class);
    int id = jsonObject.get("status").getAsInt();

    cintout(id);
    cout(link);
    cout(inputLine);
    try {

        if (id == 200)
            return ValidationType.VALID;
        else
            return ValidationType.WRONG_RESPONSE;
    } catch (IllegalArgumentException exc) {

        if (id == 200)
            return ValidationType.VALID;
        else
            return ValidationType.WRONG_RESPONSE;
    }
} catch (IOException e) {
    e.printStackTrace();
    return ValidationType.VALID;
}

我设法检索了状态值,但未检索到激活ID。

2 个答案:

答案 0 :(得分:0)

您需要使用Gson获取data对象,然后才能访问其字段:

int activation_id = jsonObject.get("data").getAsJsonObject().get("activation_id").getAsInt();

答案 1 :(得分:0)

您使用了两个库来进行JSON解析,这在此上下文中不是必需的。假设您要使用Gson。删除JSONParser jsonParser = new JSONParser();

现在,可以在activation_id到达JSON数据Root -> data -> activation_id。根代表存储到jsonObject的整个JSON对象。 data键本身代表一个对象。因此,我们可以通过获取activation_id键值作为对象,然后获取data作为int / string来达到activation_id

Gson gson = new Gson();
JsonObject jsonObject = gson.fromJson(jsonS, JsonObject.class);
int id = jsonObject.get("status").getAsInt();
int activationId = jsonObject.get("data").getAsJsonObject().get("activation_id").getAsInt();

有关json对象的更多信息:https://www.shapediver.com/blog/json-objects-explained/