Не могу превратить строку в объект JSON - PullRequest
1 голос
/ 22 октября 2019

Я пытался превратить строку, которую я получаю в ответ на запрос GET с OkHttp. Проблема в том, что он выдает ошибку, и я не знаю, как ее исправить, хотя я понимаю, в чем проблема.

Я пытался заменить символ, хотя он не работал.

Код

    private static void checkMails() throws IOException, NoSuchAlgorithmException {
        // Set algorithm to MD5
        MessageDigest md = MessageDigest.getInstance("MD5");

        // Update the MessageDigest object with the bytes of our email.
        md.update("mail@dump.com".getBytes(StandardCharsets.UTF_8));

        // Digest the object which contains the bytes of our email String.
        byte[] digest = md.digest();

        // MD5 Hash of the email we generated using Details()
        String emailHash = DatatypeConverter
                .printHexBinary(digest).toLowerCase();
        // Get request which returns the response.
        String response = doGetRequest("https://privatix-temp-mail-v1.p.rapidapi.com/request/mail/id/" + emailHash + "/");
        System.out.println(emailHash);
        System.out.println(response);

        // If the response does contain mails then use the verify function.
        if (!response.contains("There are no emails yet")) {
            JSONObject json = new JSONObject(response);
            System.out.println(json.getString("mail_text"));
        } else {
            System.out.println("No mails yet.");
        }
    }


    /* GET Request method */
    private static String doGetRequest(String url) throws IOException {
        Request request = new Request.Builder()
                .url(url)
                .get()
                .addHeader("x-rapidapi-host", "privatix-temp-mail-v1.p.rapidapi.com")
                .addHeader("x-rapidapi-key", config.getTempMailApiKey())
                .build();

        Response response = client.newCall(request).execute();
        return response.body().string();
    }

Данные, полученные из ответа:

[{"_id":{"oid":"5daf18a2f4a4b314d399d510"},"createdAt":{"milliseconds":1571756194861},"mail_id":"970af329d17a93669653b26bd7d1c779"

Ошибка

Exception in thread "main" org.json.JSONException: A JSONObject text must begin with '{' at 1 [character 2 line 1]
    at org.json.JSONTokener.syntaxError(JSONTokener.java:507)
    at org.json.JSONObject.<init>(JSONObject.java:222)
    at org.json.JSONObject.<init>(JSONObject.java:406)
    at creator.VerifyMail.checkMails(VerifyMail.java:51)
    at creator.VerifyMail.main(VerifyMail.java:27)

Я ожидал, что смогу преобразовать его в объект json изатем сможете получить определенную часть объекта json.

1 Ответ

0 голосов
/ 22 октября 2019

Я использую метод ниже, чтобы убедиться, что случайная строка является допустимой JSON. После чего я разбираюсь в соответствующий объект

    private static boolean isJson(String json) {
        Gson gson = new Gson();
        if(json.isEmpty()){
            return false;
        }
        try {
            gson.fromJson(json, Object.class);
            Object jsonObjType = gson.fromJson(json, Object.class).getClass();
            if(jsonObjType.equals(String.class)){
                return false;
            }
            return true;
        } catch (com.google.gson.JsonSyntaxException ex) {
            return false;
        }
    }
...