User Learning
User Learning

Reputation: 3473

Parse nested Json object and store in database in Android

I just tried to get values that are stored in my JSON file and save it into sqlite database:

This is my JSON file:

{
  "list": {
    "meta": {
      "count": 132, 
      "start": 0, 
      "type": "resource-list"
    }, 
    "resources": [
      {
        "resource": {
          "classname": "Quote", 
          "fields": {
            "date": "2017-03-16", 
            "price": 3.6720000000000002, 
            "type": "currency", 
            "symbol": "AED=X"
          }
        }
      }, 
      {
        "resource": {
          "classname": "Quote", 
          "fields": {
            "date": "2017-03-16", 
            "price": 65.075000000000003, 
            "type": "currency", 
            "symbol": "AFN=X"
          }
        }
      }, 
      {
.............
}
............

I have tried like this but getting exception :

JSONObject mainObj = null;
try {
    mainObj = new JSONObject(JSON);
    JSONObject getSth = mainObj.getJSONObject("list");
    if(mainObj != null){
        JSONArray list = getSth.getJSONArray("resources");
        if(list != null){
            for(int i = 0; i < list.length();i++){
                JSONObject elem = list.getJSONObject(i);
                if(elem != null){
                    JSONObject prods = elem.getJSONObject("fields");
                    Object level = prods.get("type");
                    Toast.makeText(getApplicationContext(),""+level.toString(),Toast.LENGTH_LONG).show();
                }
            }
        }
    }
}catch (Exception e){
    Toast.makeText(getApplicationContext(),""+e.toString(),Toast.LENGTH_LONG).show();
}

I was getting exception : no values in fields...

And pls give some suggestions that storing these values in Database table(matrotable) of(row fields) name, prize, symbol and type, I may try by making String Array and retrieving and storing the values for sqlite, is there any other easy options... thanks

Upvotes: 0

Views: 1035

Answers (3)

Ali Noureddine
Ali Noureddine

Reputation: 323

I recommend to you to use the simplest and easiest way to parse a json response to avoid this kind of issues:

1- generate your model classes by using this tool: http://www.jsonschema2pojo.org/ download and add the generated classes to your model package.

2- add this dependency to your gradle file:

compile 'com.google.code.gson:gson:2.4'

3- Call this method to parse your response:

Gson gson = new Gson();
ResponseModel responseModel = gson.fromJson(json, ResponseModel.class);

Upvotes: 0

rafsanahmad007
rafsanahmad007

Reputation: 23881

You are missing the resource JOSNObject parsing...

 for(int i = 0; i < list.length();i++){
                JSONObject elem = list.getJSONObject(i);
                JSONObject resource = elem.getJSONObject("resource");
                if(resource != null){
                    JSONObject prods = resource.getJSONObject("fields");
                    Object level = prods.get("type");
                    Toast.makeText(getApplicationContext(),""+level.toString(),Toast.LENGTH_LONG).show();
                }
            }

Upvotes: 1

Pavneet_Singh
Pavneet_Singh

Reputation: 37404

your fields objects are inside resource object so do

  for(int i = 0; i < list.length();i++){
                JSONObject elem = list.getJSONObject(i);
                if(elem != null){
                    JSONObject prods = elem.getJSONObject("resource")
                                           .getJSONObject("fields");

                    Object level = prods.get("type");
                    Toast.makeText(getApplicationContext(),""+level.toString(),Toast.LENGTH_LONG).show();
                }
            }
"resources": [                      // resources list
  {                                 // object i
    "resource": {                   // fields are inside "resource" object 
      "classname": "Quote", 
      "fields": {
        "date": "2017-03-16", 
        "price": 3.6720000000000002, 
        "type": "currency", 
        "symbol": "AED=X"
      }
    }
  }

Upvotes: 2

Related Questions