2013-11-14 105 views
1

我试图反序列化一个JSON到我的对象,但我得到一个NullPointerException。搜索后,我发现这个问题可能在数据结构中。反序列化JSON以反对Gson

你能帮我创建一个合适的班级,或者发现我的错误吗?

[ 
    { 
    "id": "54", 
    "brand": "Cooper", 
    "model": "Discoverer H\/T Plus", 
    "d": "13", 
    "w": "7", 
    "h": "0", 
    "comment": "test1", 
    "time_add": "2013-11-14 12:42:47", 
    "imgs": [ 
     { 
     "id": "28", 
     "reused_id": "54", 
     "path_big": "path5", 
     "path_small": "", 
     "time_add": "0000-00-00 00:00:00" 
     } 
    ] 
    }, 
    { 
    "id": "55", 
    "brand": "Barum", 
    "model": "Bravuris", 
    "d": "13", 
    "w": "7", 
    "h": "0", 
    "comment": "ooooooopll", 
    "time_add": "2013-11-14 12:43:55", 
    "imgs": [ 
     { 
     "id": "29", 
     "reused_id": "55", 
     "path_big": "path5", 
     "path_small": "", 
     "time_add": "0000-00-00 00:00:00" 
     } 
    ] 
    }, 
    { 
    "id": "56", 
    "brand": "Kumho", 
    "model": "Kumho KH17", 
    "d": "19", 
    "w": "185", 
    "h": "50", 
    "comment": "bugaga", 
    "time_add": "2013-11-14 13:14:58", 
    "imgs": [ 
     { 
     "id": "30", 
     "reused_id": "56", 
     "path_big": "path5", 
     "path_small": "", 
     "time_add": "0000-00-00 00:00:00" 
     } 
    ] 
    }, 
    { 
    "id": "57", 
    "brand": "Barum", 
    "model": "Bravuris", 
    "d": "13", 
    "w": "7", 
    "h": "0", 
    "comment": "", 
    "time_add": "2013-11-14 13:32:11", 
    "imgs": [ 
     { 
     "id": "31", 
     "reused_id": "57", 
     "path_big":path5", 
     "path_small": "", 
     "time_add": "0000-00-00 00:00:00" 
     } 
    ] 
    }, 
    { 
    "id": "58", 
    "brand": "Barum", 
    "model": "Bravuris", 
    "d": "13", 
    "w": "7", 
    "h": "0", 
    "comment": "", 
    "time_add": "2013-11-14 13:33:13", 
    "imgs": [ 
     { 
     "id": "32", 
     "reused_id": "58", 
     "path_big": "path5", 
     "path_small": "", 
     "time_add": "0000-00-00 00:00:00" 
     } 
    ] 
    } 
] 

这是我试图填补了类:

public class Tyres { 
    public Tyres() { 

    } 
    public String id; 
    public String brand; 
    public String model; 
    public String d; 
    public String w; 
    public String h; 
    public String comment; 
    public String time_add; 
    public ArrayList<Images> imgs; 
    public Map<String, String> getInfo() { 
     Map<String, String> result = new HashMap<String, String>(); 
     result.put("id", id); 
     result.put("brand", brand); 
     result.put("model", model); 
     result.put("d", d); 
     result.put("w", w); 
     result.put("h", h); 
     result.put("comment", comment); 
     result.put("time_add", time_add); 
     return result; 
    } 
    public ArrayList<Map<String, String>> getImgsInfo() { 
     ArrayList<Map<String, String>> result = new ArrayList<Map<String, String>>(); 
     Map<String, String> imgInfo; 
     for(Images img: imgs) { 
      imgInfo = img.getInfo(); 
      result.add(imgInfo); 
     } 
     return result; 

    } 

} 

public class Images { 
    public Images() { 

    } 
    public String id; 
    public String reused_id; 
    public String path_big; 
    public String path_small; 
    public String time_add; 
    public Map<String, String> getInfo() { 
     Map<String, String> result = new HashMap<String, String>(); 
     result.put("id", id); 
     result.put("reused_id", reused_id); 
     result.put("path_big", path_big); 
     result.put("path_small", path_small); 
     result.put("time_add", time_add); 

     return result; 
    } 
} 

和遵循的是我如何努力来初始化对象:

private void history_to_Tyres(String historyJSON) { 
    Gson gson = new Gson(); 

    Type ttype = (Type) new ArrayList<Tyres>(); 
    try { 
     tyres = gson.fromJson(historyJSON, ttype); 
    } catch (Exception e) { 
     Toast.makeText(getBaseContext(), "uncasted", Toast.LENGTH_SHORT).show(); 
    } 
} 

,但我有一个NullPointerException当我尝试拨打电话tyres(轮胎是一个班级字段)

+0

您是否需要手动解析数据?你为什么不直接使用“映射”? – TeeTracker

+0

感谢您的建议,我在这篇文章中找到了解决方案(声明所有getters&setters之后): http://stackoverflow.com/questions/9598707/gson-throwing-expected-begin-object-but-was-begin-array – Sild

回答

1

你的json在“```path_大 “:PATH5”,

这里是正确的JSON: -

[ 
{ 
    "id": "54", 
    "brand": "Cooper", 
    "model": "Discoverer H/T Plus", 
    "d": "13", 
    "w": "7", 
    "h": "0", 
    "comment": "test1", 
    "time_add": "2013-11-14 12:42:47", 
    "imgs": [ 
     { 
      "id": "28", 
      "reused_id": "54", 
      "path_big": "path5", 
      "path_small": "", 
      "time_add": "0000-00-00 00:00:00" 
     } 
    ] 
}, 
{ 
    "id": "55", 
    "brand": "Barum", 
    "model": "Bravuris", 
    "d": "13", 
    "w": "7", 
    "h": "0", 
    "comment": "ooooooopll", 
    "time_add": "2013-11-14 12:43:55", 
    "imgs": [ 
     { 
      "id": "29", 
      "reused_id": "55", 
      "path_big": "path5", 
      "path_small": "", 
      "time_add": "0000-00-00 00:00:00" 
     } 
    ] 
}, 
{ 
    "id": "56", 
    "brand": "Kumho", 
    "model": "Kumho KH17", 
    "d": "19", 
    "w": "185", 
    "h": "50", 
    "comment": "bugaga", 
    "time_add": "2013-11-14 13:14:58", 
    "imgs": [ 
     { 
      "id": "30", 
      "reused_id": "56", 
      "path_big": "path5", 
      "path_small": "", 
      "time_add": "0000-00-00 00:00:00" 
     } 
    ] 
}, 
{ 
    "id": "57", 
    "brand": "Barum", 
    "model": "Bravuris", 
    "d": "13", 
    "w": "7", 
    "h": "0", 
    "comment": "", 
    "time_add": "2013-11-14 13:32:11", 
    "imgs": [ 
     { 
      "id": "31", 
      "reused_id": "57", 
      "path_big": "path5", 
      "path_small": "", 
      "time_add": "0000-00-0000: 00: 00" 
     } 
    ] 
}, 
{ 
    "id": "58", 
    "brand": "Barum", 
    "model": "Bravuris", 
    "d": "13", 
    "w": "7", 
    "h": "0", 
    "comment": "", 
    "time_add": "2013-11-1413: 33: 13", 
    "imgs": [ 
     { 
      "id": "32", 
      "reused_id": "58", 
      "path_big": "path5", 
      "path_small": "", 
      "time_add": "0000-00-0000: 00: 00" 
     } 
    ] 
} 
] 

请使用www.jsonlint.com验证您的JSON。

`

+0

对不起,我犯了一个错误wile copy。我在代码中使用正确的json。 – Sild

2
  1. 您需要的getter &制定者在类的所有属性。

  2. 为类实现可序列化的接口。