2017-03-18 53 views
0

我只是试图让存储在我的JSON文件中的值,并将其保存到SQLite数据库:解析嵌套的JSON对象,并存储在数据库中的Android

这是我的JSON文件:

{ 
    "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" 
      } 
     } 
     }, 
     { 
............. 
} 
............ 

我已经试过这样的,但得到的异常:

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(); 
} 

我得到异常:在没有字段值...

并请提供一些建议,将这些值存储在(行字段)名称,奖品,符号和类型的数据库表(matrotable)中,我可以尝试通过制作String Array并检索和存储sqlite的值,是否有其他易选项... 感谢

回答

1

fields对象是内部resource对象,这样做

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" 
     } 
    } 
    } 
+0

是日Thnx,我需要存储SQLite和后来检索,我怎么能轻松实现这一点,我的目的是通过将这些字段添加到字符串数组并将其复原?任何其他建议。 –

+1

@Learner然后你应该看一下'GSON',然后你就可以创建一个pojo列表,试试[GSON docs link](http://stackoverflow.com/documentation/android/4158/gson#t= 201703181903413153608) –

1

你缺少resource JOSNObject解析...

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(); 
       } 
      } 
+0

是的thnx,我需要存储到sqlite,然后检索后,我怎么能实现这一点,我的去是通过添加这些字段到字符串数组和retieveing它?任何其他建议。 –

+1

看看这个:[答案](http://stackoverflow.com/questions/6288500/save-data-from-json-object-to-database-sqlite)与getter和setter创建一个模型类...或者使用GSON和Pojo的其他选项。 – rafsanahmad007

0

我建议您用最简单和最简单的方式来解析JSON响应,以避免这样的问题:

1-通过使用这个工具生成模型类:http://www.jsonschema2pojo.org/下载并将生成的类添加到您的模型包中。

2 - 添加这个依赖于你的gradle这个文件:

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

3-调用此方法来解析你的回应:

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