Pegar um JSON via POST

Estou usando a biblioteca Java APACHE HTTP, eu faço uma requisição e recebo um JSON como resposta. Daí, preciso extrair alguns dados, mas não entendi muito bem como posso fazer isso. A forma que tenho hoje é a seguinte:

class SenderPost {
    private HttpResponse response;

    Integer postLogin(String login, String password) throws UnsupportedEncodingException {

        DOMSenderLogin dsl = new DOMSenderLogin(login, password);
        Gson gson = new Gson();
        String jsonToSend = gson.toJson(dsl);

        HttpClient client = HttpClientBuilder.create().build();
        CloseableHttpClient clientClose = HttpClients.createDefault();
        HttpPost post = new HttpPost("some_url");
        StringEntity entity = new StringEntity(jsonToSend);

        post.setHeader("Accept", "application/json");
        post.setHeader("Content-Type", "application/json");
        post.setHeader("Authorization", "Bearer aReallyReallyNiceBearer");
        post.setEntity(entity);

        try {
            response = client.execute(post);
            HttpEntity entidade = response.getEntity();
            String responseString = EntityUtils.toString(entidade, "UTF-8");
            System.out.println(responseString);
            clientClose.close();

        } catch (IOException e) {
            JOptionPane.showMessageDialog(null, "Não foi possível se conectar aos servidores", "error", JOptionPane.INFORMATION_MESSAGE);
        }

        post.releaseConnection();
        return response.getStatusLine().getStatusCode();
    }
}

E eu consigo a resposta em formato de String, em exemplo:

{"id":145,"login":"o_login","email":"someEmail@some.com","descricao":"Operador","idioma":"pt-BR","timezone":"America\/Sao_Paulo"}

O que posso fazer para conseguir pegar os dados dessa string?

Bibliotecas que estou usando: APACHE HTTPCLIENT, GSON

String json = "{\"Success\":true,\"Message\":\"Invalid access token.\"}";
JsonParser jsonParser = new JsonParser();
JsonObject jo = (JsonObject)jsonParser.parse(json);

Oi, Rodrigo! Obrigado pela resposta.

Você poderia me dizer como eu pego um valor usando esse jeito?

Ou o JsonObject deve ser uma classe com os atributos que quero pegar? É isso que quero entender…

Opa, post interessante. Up.

Vc pode usar o REGEX. Nesse exemplo aí eu leio o meu JSON e pego o que vem depois de id, e recupero o que eu precisava pegar.

private void mostrarIdTTS() {
    Pattern PATTERN = Pattern.compile(".*\"id\":([a-z0-9\\-]+).*");
    Matcher matcher = PATTERN.matcher(String.valueOf(resultadoChamada));

    if (matcher.matches() && matcher.groupCount() == 1) {
        String idDoUsuario = matcher.group(1);
        System.out.println("ID: " + idDoUsuario);
    } else {
        System.out.println("Não encontrou.");
    }

}

Se quiser mais exemplos: https://www.javatpoint.com/java-regex

Obrigado pela ajuda!

Resolvi fazer pelo mapeamento utilizando o Jackson. Ficou assim:

DOMInfoLogin dil = new ObjectMapper().readValue(responseString, DOMInfoLogin.class);

Agora meu problema é outro: Estou tendo diversas NPEs pq to com dificuldade em pegar o valor que quero. Devo postar tudo aqui ou crio um novo tópico? :thinking: