Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como parsear um JSON utilizando Pattern e Matcher

Olá, bom diaa. Gostaria de saber como eu poderia parsear esse json, pegando o valor do campo original_title. Alguem poderia me dar uma solução ?

{
"page":1,
"results":[
    {"adult":false,"backdrop_path":"/xg27NrXi7VXCGUr7MG75UqLl6Vg.jpg","genre_ids":[16,10751,12,35],"id":1022789,"original_language":"en","original_title":"Inside Out 2"},
    {"adult":false,"backdrop_path":"/xg27NrXi7VXCGUr7MG75UqLl6Vg.jpg","genre_ids":[16,10751,12,35],"id":1022789,"original_language":"en","original_title":"Teste"}
    ],
"total_pages":45206,"total_results":904118
}

Meu código está assim, poderiam me ajudar ?

Pattern p = Pattern.compile("\"\"original_title\":\"<qualquerString>\",");

Matcher matcher = p.matcher(json);
if(matcher.find()){
     System.out.println(matcher.group(0));
 }

Pelo que entendi, existem diversos simbolos que indicam o tipo de expressao que a estamos procurando. Mas olhei na documentação e não entendi nada. rs

2 respostas
solução!

Olá, Caique! Tudo bem?

Embora seja possível fazer isso com expressões regulares, não é a abordagem mais recomendada para manipular JSON, pois pode ser propensa a erros e complexa.

No entanto, se você realmente deseja seguir esse caminho, aqui está uma forma de ajustar sua expressão regular para capturar o valor do campo original_title:

import java.util.regex.*;

public class Main {
    public static void main(String[] args) {
        String json = "{\n" +
                      "\"page\":1,\n" +
                      "\"results\":[\n" +
                      "\t{\"adult\":false,\"backdrop_path\":\"/xg27NrXi7VXCGUr7MG75UqLl6Vg.jpg\",\"genre_ids\":[16,10751,12,35],\"id\":1022789,\"original_language\":\"en\",\"original_title\":\"Inside Out 2\"},\n" +
                      "\t{\"adult\":false,\"backdrop_path\":\"/xg27NrXi7VXCGUr7MG75UqLl6Vg.jpg\",\"genre_ids\":[16,10751,12,35],\"id\":1022789,\"original_language\":\"en\",\"original_title\":\"Teste\"}\n" +
                      "\t],\n" +
                      "\"total_pages\":45206,\"total_results\":904118\n" +
                      "}";

        Pattern p = Pattern.compile("\"original_title\":\"([^\"]*)\"");
        Matcher matcher = p.matcher(json);
        while (matcher.find()) {
            System.out.println(matcher.group(1));
        }
    }
}

Aqui está o que foi ajustado:

  1. A expressão regular foi alterada para \"original_title\":\"([^\"]*)\". Isso captura qualquer sequência de caracteres (exceto aspas) que venha após "original_title":".
  2. Usei matcher.group(1) para obter o valor capturado dentro dos parênteses.

No entanto, uma abordagem mais robusta e recomendada seria usar uma biblioteca JSON, como o Jackson ou Gson, para parsear o JSON.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Muito obrigado, Armano. Eu estou fazendo desta maneira pois foi o direcionamento que chegou no email do 7 days to code da alura, utilizando regex mesmo. Muito obrigado pela explicação, funcionou perfeitamente.