Разбор ответа JSON от HTTP-запроса с Gson в Java - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь прочитать следующие выходные данные json с URL-адреса

{
    "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"
    }
}

Я пытаюсь получить оба значения "status: 200" и "Activ_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;
}

Мне удалось получить значение состояния, но не идентификатор активации.

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Вы использовали две библиотеки для разбора JSON, который не требуется в этом контексте.Предполагая, что вы хотите использовать Gson.Удалить JSONParser jsonParser = new JSONParser();

Теперь в ваших данных JSON activation_id может быть достигнуто на Root -> data -> activation_id.Корень представляет весь объект JSON, который хранится в jsonObject.data сам ключ представляет объект.Поэтому мы можем достичь activation_id, получив data значение ключа как объект, а затем получить activation_id как int / string.

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/

0 голосов
/ 23 мая 2019

Вам нужно получить объект data с помощью Gson, прежде чем вы сможете получить доступ к его полям:

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