não faz muito sentido isso, realmente. mostra um exemplo do json.
o que vc pode fazer é validar o mesmo com alguma ferramenta
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
Download
http://www.java2s.com/Code/Jar/a/Downloadapachecommonslangjar.htm
https://commons.apache.org/proper/commons-lang/download_lang.cgi
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();