Parsing JSON de HTTPResponse
Mon JSON ressemble à ceci-
{"ipinfo": {
"ip_address":"4.2.2.2",
"ip_type":"Mapped",
"Location":{
"continent":"north america",
"latitude":33.499,
"longitude":-117.662,
"CountryData":{
"country":"united states",
"country_code":"us"},
"region":"southwest",
"StateData":{
"state":"california",
"state_code":"ca"},
"CityData":{
"city":"san juan capistrano",
"postal_code":"92675",
"time_zone":-8}}
}}
C'est mon code ci-dessous qui tente d'accéder aux membres d'éléments dans un JSONArray
try {
String url = service + version + method + ipAddress + format;
StringBuilder builder = new StringBuilder();
httpclient = new DefaultHttpClient();
httpget = new HttpGet(url);
httpget.getRequestLine();
response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream inputStream = entity.getContent();
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
for (String line = null; (line = bufferedReader.readLine()) != null;) {
builder.append(line).append("\n");
}
//Exception getting thrown in below line
JSONArray jsonArray = new JSONArray(builder.toString());
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
}
}
} catch (Exception e) {
getLogger().log(LogLevel.ERROR, e.getMessage());
} finally {
bufferedReader.close();
httpclient.getConnectionManager().shutdown();
}
Je suis toujours exception à cette ligne-
JSONArray jsonArray = new JSONArray(builder.toString());
Ci-dessous est l'exception se faire jeter
org.json.JSONException: A JSONArray text must start with '[' at character 1
Quelqu'un peut-il me suggérer ce mal, je le fais dans mon code? Et comment puis-je l'améliorer?
Je pense que le message d'erreur est assez précis. le JSON que vous avez posté n'a pas de tableaux, de simples objets. JSON syntaxe est json.org
OriginalL'auteur arsenal | 2012-10-13
Vous devez vous connecter pour publier un commentaire.
Je n'ai pas utilisé cette API particulier, mais à en juger par le fait que l'objet est nommé
JSONArray
(mot-clé: array) je suppose qu'il attend un tableau. À l'aide de JSON, un tableau doit commencer avec un[
et à la fin avec]
:Il peut contenir des objets:
Notez comment les objets de commencer avec
{
et à la fin avec}
, à la différence des tableaux:Depuis vos données JSON ressemble plus à un
{object}
qu'un[array]
peut-être que vous devriez essayer d'utiliserJSONObject
à la place.Vraiment si vous avez deux options: vous pouvez modifier les données JSON à être un tableau, ou vous pouvez changer le code Java à utiliser
JSONObject
. (L'un ou l'autre, PAS les deux.)Changer les données JSON
Aussi simple que l'ajout d'un
[
au début et à la]
à la fin:La modification de la Java
La finale de Java serait un peu quelque chose comme:
(Encore une fois, l'un ou l'autre, PAS les deux.)
Par curiosité, laquelle des deux solutions avez-vous utilisé?
JSONObject l'une j'ai choisi. J'ai fait le bon choix?
Cela dépend vraiment de ce que vous avez besoin. Basé sur ce que vous avez dit dans la question, aucune solution n'est meilleure que l'autre... mais si il y avait d'autres facteurs - par exemple, si vous consommiez 3ème partie JSON et ne pouvait pas changer les données JSON - il pourrait être un bon choix et un mauvais choix.
OriginalL'auteur Richard JP Le Guen
Votre source JSON est juste un objet unique. Au lieu de charger dans un tableau, le chargement directement dans un
JSONObject
devrait suffire.Cet objet, il bénéficiera d'une propriété nommée
ipinfo
.OriginalL'auteur meklarian