Convertir la chaîne en tableau JSON

91

J'ai la chaîne suivante d'un JSON d'un service Web et j'essaie de le convertir en un JSONarray

{
    "locations": [
        {
            "lat": "23.053",
            "long": "72.629",
            "location": "ABC",
            "address": "DEF",
            "city": "Ahmedabad",
            "state": "Gujrat",
            "phonenumber": "1234567"
        },
        {
            "lat": "23.053",
            "long": "72.629",
            "location": "ABC",
            "address": "DEF",
            "city": "Ahmedabad",
            "state": "Gujrat",
            "phonenumber": "1234567"
        },
        {
            "lat": "23.053",
            "long": "72.629",
            "location": "ABC",
            "address": "DEF",
            "city": "Ahmedabad",
            "state": "Gujrat",
            "phonenumber": "1234567"
        },
        {
            "lat": "23.053",
            "long": "72.629",
            "location": "ABC",
            "address": "DEF",
            "city": "Ahmedabad",
            "state": "Gujrat",
            "phonenumber": "1234567"
        },
        {
            "lat": "23.053",
            "long": "72.629",
            "location": "ABC",
            "address": "DEF",
            "city": "Ahmedabad",
            "state": "Gujrat",
            "phonenumber": "1234567"
        }
    ]
}

J'ai validé cela en Stringligne, cela semble correct. Maintenant, j'utilise le code suivant dans le développement Android pour utiliser

JSONArray jsonArray = new JSONArray(readlocationFeed);

Cela lève une exception une exception d'incompatibilité de type.

Ashish Kasma
la source
Quel est le type de données readlocationFeed?
IgorGanapolsky
1
@IgorGanapolsky, String
Andrew No

Réponses:

161

Ici, vous obtenez JSONObject, alors changez cette ligne:

JSONArray jsonArray = new JSONArray(readlocationFeed); 

avec suivant:

JSONObject jsnobject = new JSONObject(readlocationFeed);

et après

JSONArray jsonArray = jsnobject.getJSONArray("locations");
for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject explrObject = jsonArray.getJSONObject(i);
}
kyogs
la source
remarqué que le constructeur pour JSONObject semble obsolète et ne prend pas en charge String en tant que paramètre dans la version 1.1.1
ankitkpd
jsnobject pourrait être jsonobject - orthographe :)
DragonFire
41

Chaîne d'entrée

[
   {
      "userName": "sandeep",
      "age": 30
   }, 
   {
      "userName": "vivan",
      "age": 5
   }
]

Moyen simple de convertir une chaîne en JSON

public class Test
{

    public static void main(String[] args) throws JSONException
    {
        String data = "[{\"userName\": \"sandeep\",\"age\":30},{\"userName\": \"vivan\",\"age\":5}]  ";
        JSONArray jsonArr = new JSONArray(data);

        for (int i = 0; i < jsonArr.length(); i++)
        {
            JSONObject jsonObj = jsonArr.getJSONObject(i);

            System.out.println(jsonObj);
        }

    }
}

Production

{"userName":"sandeep","age":30}
{"userName":"vivan","age":5}
Sandeep Bhardwaj
la source
23

Utilisation de json lib: -

String data="[{"A":"a","B":"b","C":"c","D":"d","E":"e","F":"f","G":"g"}]";
Object object=null;
JSONArray arrayObj=null;
JSONParser jsonParser=new JSONParser();
object=jsonParser.parse(data);
arrayObj=(JSONArray) object;
System.out.println("Json object :: "+arrayObj);

Utilisation de GSON lib: -

Gson gson = new Gson();
String data="[{\"A\":\"a\",\"B\":\"b\",\"C\":\"c\",\"D\":\"d\",\"E\":\"e\",\"F\":\"f\",\"G\":\"g\"}]";
JsonParser jsonParser = new JsonParser();
JsonArray jsonArray = (JsonArray) jsonParser.parse(data);
Aravind Cheekkallur
la source
Cela ne fonctionnera pas pour Google GSON? Pourriez-vous aider pour cela?
Pra_A
@pashtika .. s'il vous plaît expliquer avec votre problème..alors je peux essayer pour cela.
Aravind Cheekkallur
@pashtika ..oui, vous pouvez utiliser le pot GSON et convertir votre chaîne en json
Aravind Cheekkallur
3
Il semble y avoir une erreur dans le deuxième extrait de code, car l' gsonobjet est créé mais pas utilisé.
Dev-iL
Ignorez simplement la première ligne. Ça marche sans ça Gson gson = new Gson();
Fritz-Playmaker
16

vous devrez convertir la chaîne donnée en au JSONObjectlieu deJSONArray car la chaîne actuelle contient JsonObjectcomme élément racine au lieu de JsonArray:

JSONObject jsonObject = new JSONObject(readlocationFeed);
ρяσѕρєя K
la source
5
String b = "[" + readlocationFeed + "]";
JSONArray jsonArray1 = new JSONArray(b);
jsonarray_length1 = jsonArray1.length();
for (int i = 0; i < jsonarray_length1; i++) {

}

ou convertissez-le en JSONOBJECT

JSONObject jsonobj = new JSONObject(readlocationFeed);
JSONArray jsonArray = jsonobj.getJSONArray("locations");
Furqi
la source
la manipulation des cordes est une excellente façon de penser d'une autre direction - concernant ce problème
DragonFire
4

Essayez ce morceau de code:

try {        
    Log.e("log_tag", "Error in convert String" + result.toString());
    JSONObject json_data = new JSONObject(result);

    String status = json_data.getString("Status");
    {
        String data = json_data.getString("locations");
        JSONArray json_data1 = new JSONArray(data);
        for (int i = 0; i < json_data1.length(); i++) {
            json_data = json_data1.getJSONObject(i);

            String lat = json_data.getString("lat");
            String lng = json_data.getString("long");
        }
    }
}
Nirav Ranpara
la source
3

si la réponse est comme ça

"GetDataResult": "[{\"UserID\":1,\"DeviceID\":\"d1254\",\"MobileNO\":\"056688\",\"Pak1\":true,\"pak2\":true,\"pak3\":false,\"pak4\":true,\"pak5\":true,\"pak6\":false,\"pak7\":false,\"pak8\":true,\"pak9\":false,\"pak10\":true,\"pak11\":false,\"pak12\":false}]"

vous pouvez analyser comme ça

JSONObject jobj=new JSONObject(response);
        String c = jobj.getString("GetDataResult");         
        JSONArray jArray = new JSONArray(c);
        deviceId=jArray.getJSONObject(0).getString("DeviceID");

ici, la taille de JsonArray est 1. Sinon, vous devez utiliser la boucle for pour obtenir des valeurs.

Sanu
la source
1

Vous pouvez faire ce qui suit:

JSONArray jsonArray = jsnobject.getJSONArray("locations");
    for (int i = 0; i < jsonArray.length(); i++) {
        JSONObject explrObject = jsonArray.getJSONObject(i);
}
Jonathan Nolasco Barrientos
la source
1

C'est un moyen très simple de convertir:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;


class Usuario {
private String username;
private String email;
private Integer credits;
private String twitter_username;

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public Integer getCredits() {
    return credits;
}

public void setCredits(Integer credits) {
    this.credits = credits;
}

public String getTwitter_username() {
    return twitter_username;
}

public void setTwitter_username(String twitter_username) {
    this.twitter_username = twitter_username;
}

@Override
public String toString() {
    return "UserName: " + this.getUsername() + " Email: " + this.getEmail();
}

}

/*
 * put string into file jsonFileArr.json
 * [{"username":"Hello","email":"[email protected]","credits"
 * :"100","twitter_username":""},
 * {"username":"Goodbye","email":"[email protected]"
 * ,"credits":"0","twitter_username":""},
 * {"username":"mlsilva","email":"[email protected]"
 * ,"credits":"524","twitter_username":""},
 * {"username":"fsouza","email":"[email protected]"
 * ,"credits":"1052","twitter_username":""}]
 */

public class TestaGsonLista {

public static void main(String[] args) {
    Gson gson = new Gson();
    try {
        BufferedReader br = new BufferedReader(new FileReader(
                "C:\\Temp\\jsonFileArr.json"));
        JsonArray jsonArray = new JsonParser().parse(br).getAsJsonArray();
        for (int i = 0; i < jsonArray.size(); i++) {
            JsonElement str = jsonArray.get(i);
            Usuario obj = gson.fromJson(str, Usuario.class);
            System.out.println(obj);
            System.out.println(str);
            System.out.println("-------");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

Marlon Leite de Albuquerque
la source
1
Veuillez améliorer votre réponse en ajoutant du contexte sous forme de texte et non de commentaire.
Richard Erickson
0

Si vous avez suivi JSON à partir du service Web, Json Array comme réponse:

       [3]
 0:  {
 id: 2
 name: "a561137"
 password: "test"
 firstName: "abhishek"
 lastName: "ringsia"
 organization: "bbb"
    }-
1:  {
 id: 3
 name: "a561023"
 password: "hello"
 firstName: "hello"
  lastName: "hello"
  organization: "hello"
 }-
 2:  {
  id: 4
  name: "a541234"
  password: "hello"
  firstName: "hello"
  lastName: "hello"
  organization: "hello"
    }

doivent d'abord l'accepter en tant que tableau Json, puis lors de la lecture de son objet, utiliser Object Mapper.readValue, car Json Object Still in String.

      List<User> list = new ArrayList<User>();
      JSONArray jsonArr = new JSONArray(response);


      for (int i = 0; i < jsonArr.length(); i++) {
        JSONObject jsonObj = jsonArr.getJSONObject(i);
         ObjectMapper mapper = new ObjectMapper();
        User usr = mapper.readValue(jsonObj.toString(), User.class);      
        list.add(usr);

    }

mapper.read est une fonction correcte, si vous utilisez mapper.convert (param, param). Cela vous donnera une erreur.

abhishek ringsia
la source
J'ai JSON comme ci-dessus et je dois accomplir la tâche ci-dessus en utilisant Gson. Comment pourrais-je faire ça?
Bishan