goGud
goGud

Reputation: 4343

How to parse json object in Android?

I am trying to parse Json object which is;

{
   "results":[
      {
         "face":{
            "id":361122.0,
            "photo_hash":"0a2aaff34fd576fc1caf711d88cbfd53",
            "x1":699,
            "x2":1020,
            "y1":271,
            "photo":" ",
            "thumbnail":" ",
            "meta":"",
            "timestamp":"2016-07-28T08:50:43.710183",
            "y2":592
         },
         "confidence":0.93187
      },
      {
         "face":{
            "id":361260.0,
            "photo_hash":"767bf4df0c8a04361aaf5e6b74eb4d8c",
            "x1":-25,
            "x2":147,
            "y1":10,
            "photo":" ",
            "thumbnail":" ",
            "meta":"",
            "timestamp":"2016-07-28T15:13:09.086390",
            "y2":165
         },
         "confidence":0.926754
      }
   ]
}

And I am using such code for parsing confidence and thumbnail :

resultParams[i].confidence = jsonObject.getJSONArray("results").getJSONObject(i).getString("confidence");

resultParams[i].thumbnail = jsonObject.getJSONArray("results").getJSONObject(i).getJSONObject("face").getString("thumbnail");

However it gives exception "java.lang.NullPointerException: Attempt to write to field on a null object reference"

Could you please help me how to successfully parse it?

Upvotes: 0

Views: 309

Answers (3)

thirunarayan
thirunarayan

Reputation: 1

Firstly based on the JSON response you create your model object. You can make use of GSON for converting the whole content into object. This can be acheived using other libaries too.

So here are the Model objects for your JSON

import java.util.Date;
import java.util.List;
class Result {
    private List<PersonDetails> results;
    // generate setter and getter
}
class PersonDetails
{
    private ImageDetail face;
    private Float confidence;
    // generate setter and getter
}

class ImageDetail
{
    private Long id;
    private String photo_hash;
    private Integer x1,x2,y1,y2;
    private String thumbnail;
    private String meta;
    private String photo;
    private Date timestamp;
    // generate setter and getter
}

Now use GSON to convert your JSON.

public class JsonTransaformer1 {

@SuppressWarnings("unchecked")
public static void main(String[] args) {
    String text = "Place your JSON Response as input that you posted";
    Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new GsonUTCdateAdapter()).create();
    Result obj = gson.fromJson(text, Result.class);
    System.out.println(obj.getResults().size());
    System.out.println(obj.getResults().get(0).getFace().getId());
    System.out.println(obj.getResults().get(0).getConfidence());
}

}

As the Date format that is present in your JSON response is different we need to register the Adapter to parse the date. Look into this link for parsing

Java Date to UTC using gson

class GsonUTCdateAdapter implements JsonSerializer<Date>,JsonDeserializer<Date> {

private final DateFormat dateFormat;

public GsonUTCdateAdapter() {
  dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US);      //This is the format I need
  dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));                               //This is the key line which converts the date to UTC which cannot be accessed with the default serializer
}

@Override public synchronized JsonElement serialize(Date date,Type type,JsonSerializationContext jsonSerializationContext) {
    return new JsonPrimitive(dateFormat.format(date));
}

@Override public synchronized Date deserialize(JsonElement jsonElement,Type type,JsonDeserializationContext jsonDeserializationContext) {
  try {
    return dateFormat.parse(jsonElement.getAsString());
  } catch (ParseException e) {
    throw new JsonParseException(e);
  }
}
}

Now running the main you will get the Object representation of JSON.

Upvotes: 0

terziele
terziele

Reputation: 1

If you know what kind of json-object will you receive(or maybe you have an API), you can make an object of this class by for example Jackson library. And then get access to "face" object with its getter.

yourObject.getResults().get(i).getFace().getThumbnail();

Upvotes: 0

Fildor
Fildor

Reputation: 16148

To give this an answer:

"java.lang.NullPointerException: Attempt to write to field on a null object reference"

Means your left side is the problem. resultParams[i] is most probably null.

Upvotes: 2

Related Questions