Retirar quebra de linha de JSON

não faz muito sentido isso, realmente. mostra um exemplo do json.

o que vc pode fazer é validar o mesmo com alguma ferramenta

Obrigado pela ajuda.

Seguinte, eu faço uma consulta no bd, pegandos os Estados.

Então eu gero um JSON, que é o seguinte:

{"estados":[{"id":"2","nome":"Minas Gerais"},{"id":"1","nome":"Rio de Janeiro"}]}

Ai quando o android pega esse JSON, ele dá erro. Agora se eu enviar o seguinte JSON:

{"estados":[{"id":"2","nome":"Minas_Gerais"},{"id":"1","nome":"Rio_de_Janeiro"}]}

Ai o android pega o json, usa e não da nenhum erro.

Entendeu? Não sei se consegui explicar exatamente o que está acontecendo.

Validei no site que vc me passou, ele retornou JSON Válido.

que erro ele apresenta?

org.json.JSONException: Unterminated string at character 35 of {"estados":[{"id":"2","nome":"Minas

Poste o código referente a esse erro!?

try 
{
        JSONObject json = new JSONObject(resposta);
        JSONArray estadosJSONArray = json.getJSONArray("estados");
        List<String> estadosArray = new ArrayList();

        for (int i = 0; i < estadosJSONArray.length(); i++) {
            JSONObject estado = estadosJSONArray.getJSONObject(i);
            String nomeDoEstado = estado.getString("nome");

            estadosArray.add(nomeDoEstado);
        }
        fragmentCom.populaSpinner(estadosArray);

} 
catch (JSONException e) 
{
        e.printStackTrace();
        Toast.makeText(fragmentCom.getContext(), 
              "Erro ao carregar spinner..", Toast.LENGTH_SHORT).show();
}

cara estados não parece ser um jsonArray e sim um jsonObject

Eu fiz o teste assim e funcionou de primeira!:

String resposta = "{\"estados\":[{\"id\":\"2\",\"nome\":\"Minas Gerais\"},{\"id\":\"1\",\"nome\":\"Rio de Janeiro\"}]}";
JSONObject json = new JSONObject(resposta);
JSONArray estadosJSONArray = json.getJSONArray("estados");
List<String> estadosArray = new ArrayList();

for (int i = 0; i < estadosJSONArray.length(); i++) {
    JSONObject estado = estadosJSONArray.getJSONObject(i);
    String nomeDoEstado = estado.getString("nome");
    estadosArray.add(nomeDoEstado);
    System.out.println(nomeDoEstado);
}

Realmente, fiz o mesmo teste e funcionou.

O interessante que quando abro a página em php em meu navegador, ela me devolve a resposta:
{"estados":[{"id":"2","nome":"Minas Gerais"},{"id":"1","nome":"Rio de Janeiro"}]}

E a string de teste que dá certo é:
"{\"estados\":[{\"id\":\"2\",\"nome\":\"Minas Gerais\"},{\"id\":\"1\",\"nome\":\"Rio de Janeiro\"}]}"

Pelo que pude perceber, é a mesma coisa. Onde posso estar errando então?

E o caracter de escape por isso o meu funcionou e o seu não

Leia:

Desculpe Dragoon, não entendi.

Quando eu fiz o mesmo teste que você, utilizando a string para preencher meu spinner, ele funcionou.

Mas quando eu pego o json recebido, daí não funciona.

Também não entendi essa questão do caracter de escape.

Quando você recebe ele vem dentro de uma String?
Como você recupera me dá o exemplo de código faço o teste pra você?

Função que chama a conexão e recebe o JSON:

protected String doInBackground(Void... params) {

        WebClientBuscaEstados client = new WebClientBuscaEstados();
        String resposta = client.post();

        return resposta;
}

E a classe WebClientBuscaEstados:

public class WebClientBuscaEstados {
    public String post(){
        String pagina = Constants.URL_SITE+ "/buscaEstados.php";

        try{
            URL url = new URL(pagina);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestProperty("Content-type", "application/json"); 
            connection.setRequestProperty("Accept", "application/json"); 

            connection.setDoOutput(true);
            PrintStream output = new PrintStream(connection.getOutputStream());
            output.println();
            connection.connect();
            String jResposta = new Scanner(connection.getInputStream()).next();

            return jResposta;

        } catch (MalformedURLException e) {
            e.printStackTrace();

        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

Tem essa classe de utilidades que você deve usar depois que recebe o resultado:

Exemplo: http://www.avajava.com/tutorials/lessons/how-do-i-escape-a-string-for-java.html

API: https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringEscapeUtils.html

Download

http://www.java2s.com/Code/Jar/a/Downloadapachecommonslangjar.htm
https://commons.apache.org/proper/commons-lang/download_lang.cgi

Aqui tem um exemplos e os links referentes! @R_a_f_a_e_ll

Eu acessei tudo que vc mandou…

Não consegui…

Seria basicamente usar a biblioteca StringEscapeUtils e usar uma função para converter meu json retirando os caracteres de escape? Seria isso?

Seguinte eu precisa receber esse json aqui no meu netbeans tem como! ?

Desculpa Dragoon, não entendi sua pergunta.

Consegui resolver da seguinte maneira:

Quando recebia a resposta do webservice, colocava em um String recebendo um Scanner.

String jResposta = new Scanner(connection.getInputStream()).next();

Apenas recebi a dica de mudar esse Scanner, passando para ele qual seria o meu limite final de arquivo, “\n”.

Scanner jResposta = new Scanner(connection.getInputStream()).useDelimiter("\n");
String resposta = jResposta.next();
1 curtida