8

how to properly convert this String to a jsonArray?

{
    "myArray": [
    {   "id": 1,
        "att1": 14.2,
        "att2": false },
    {   "id": 2,
        "att1": 13.2,
        "att2": false },
    {   "id": 3,
        "att1": 13,
        "att2": false }
  ]}

An JSONArray jArray = new JSONArray(STRING_FROM_ABOVE); results in jArray.length = 1 Its my first time to get in touch with json :)

Community
  • 1
  • 1
DieselPower
  • 738
  • 2
  • 6
  • 22

4 Answers4

11

Try this :

JSONObject jObject = new JSONObject(STRING_FROM_ABOVE);
JSONArray jArray = jObject.getJSONArray("myArray");

The "string_from_above" is not a Json Array, it's a Json object, containing one attribute (myArray) which is a Json Array ;)

You can then do :

for (int i = 0; i < jArray.length(); i++) {
        JSONObject jObj = jArray.getJSONObject(i);
        System.out.println(i + " id : " + jObj.getInt("id"));
        System.out.println(i + " att1 : " + jObj.getDouble("att1"));
        System.out.println(i + " att2 : " + jObj.getBoolean("att2"));
}
Organ
  • 453
  • 2
  • 6
2

While parsing, add values to objects and ArrayLists or however the way you want to use it. Good luck.

JSONObject jo = new JSONObject(STRING_FROM_ABOVE);
JSONArray rootArray= jo.getJSONArray("myArray");
int rootArrayLength=rootArray.length();
for(int i=0;i<rootArrayLength;i++){
   int id=   rootArray.getJSONObject(i).getInt("id");
   // do same for others too and create an object
}
// create object and make a list
canova
  • 3,965
  • 2
  • 22
  • 39
1

Just to throw another method into the mix here, I'd like to recommend taking a look at Gson. Gson is a library that makes serialization to and deserialization from Java objects a snap. For example, with your string, you could do this:

// Declare these somewhere that is on the classpath
public class ArrayItem{
    public int id;
    public double att1;
    public boolean att2;
}

public class Container{
    public List<ArrayItem> myArray;
}

// In your code
Gson gson = new Gson();

Container container = gson.fromJson(json, Container.class);

for(ArrayItem item : container.myArray){
    System.out.println(item.id);  // 1, 2, 3
    System.out.println(item.att1);  // 14.2, 13.2, 13.0
    System.out.println(item.att2);  // false, false, false
}

Similarly, you can go backwards very easily too.

String jsonString = gson.toJson(container);
// jsonString no contains something like this:
// {"myArray":[{"id":1,"att1":14.2,"att2":false},{"id":2,"att1":13.2,"att2":false},{"id":3,"att1":13.0,"att2":false}]}

The primary benefit that using something like Gson provides is that you can now use all of Java's type checking by default, instead of having to manage attribute names and types yourself. It also allows you to do some fancy stuff like replicating type hierarchies that make managing large numbers of json messages a snap. It works great with Android, and the jar itself is tiny and doesn't require any additional dependencies.

TwentyMiles
  • 4,063
  • 3
  • 30
  • 37
0

Have a look at JQuery, and in particular the Parse function. This will parse a Json Array into an Object directly.

Xenolion
  • 12,035
  • 7
  • 33
  • 48
PizzaTheHut
  • 637
  • 2
  • 6
  • 20