Retirar quebra de linha de JSON

Bom dia pessoal.

Tenho um webservice em php que faz uma consulta ao banco de dados e retorna um JSON para o android consumir.

Quando tem algum campo no bd com espaço em branco, ele dá erro no android.

Quando todos os campos do bd estão sem espaço em branco, o android pega o json normal.

Alguém já se deparou com isso? Um amigo me falou que poderia ser quebra de linha do json, mas eu não acredito. De qualquer jeito, como retiraria as quebras de linha do json antes de retorná-lo ao android?

Obrigado.

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.