在安卓中反序列化JSON字符串

11

我有以下的JSON字符串

{   "Status":"Clear",    "Class": [{  <br>
        {"name":"personA", "available" : 1}, <br>
       {"name":"personB", "available" : 0}, <br>
       {"name":"personC", "available" : 0}, <br>
        {"name":"personD", "available" : 1} <br>
         }] }
如何反序列化上面的 JSON 字符串?
我想使用 JSONObject 来将整个 JSON 字符串传递给它,但不知道如何获取对象数组 (Class 对象列表) 并将其赋值给一个 arraylist<Class>。
非常感谢指导和帮助。
更新:
已解决并显示解决方案。
我已经解决了这个问题,但我认为我必须解释一下我是如何以及为什么使用这样的解决方案。
因此,为了进一步解释我的问题,这是一个最初从 Web 服务序列化并发送到我的应用程序的对象的 JSON 字符串。
原始对象如下:
 public class StatusJson
     {
         public String Status { get; set; }
         public List<Class> Class { get; set; }
     }

所以我需要做的就是在我的Android中声明一个完全相同的类,然后使用这段代码。

statusJson  statusJSON=g.fromJson(JSonString,StatusJson.class);

这将自动解析json字符串为完全相同的类格式。

如果您像我一样直接发送JSON序列化的类,希望这也能对您有所帮助。


只想强调类文件是大小写敏感的!我刚遇到了这个问题,花了半天时间才发现这个愚蠢的错误。 - JamesYTL
5个回答

5
我建议你检查 Gson库
你可以创建一个带注解的类。
private class ClassObj {
@SerializedName("personA") 
private final String personA;
....
}

然后

ClassObj object = gson.fromJson(jsonString, ClassObj.class);

它可以是一个复杂的对象,包含其他Gson对象或集合。尝试。


你的答案给了我启发,也是最接近解决方案的,所以我会接受你的答案。我会在问题中发表我的解决方案。 - JamesYTL

1
请查看 JSONObjectJSONArray 的API文档。你可以从那里弄清楚。只需将字符串创建为 JSONObject:ex. JSONObject jsonAsObj = new JSONObject(my_json_string); 然后使用 JSONArray classArray = jsonAsObject.getJSONArray("Class"); 来获取数组...至于如何将其转换为 ArrayList,您需要创建类型并遍历 JSONArray 并从中创建对象,并将它们添加到 ArrayList 中。或者您可以查看其他辅助库,例如 GSON

1
我认为这是一个无效的Json。你的class属性既是数组又是对象。

点赞了。将提供的字符串放入查看器中显示为无效的JSON,因此创建您的JSONObject应该会抛出异常。 - Submersed
1
应该是一个注释,而不是一个答案。 - shmosel
已更新。插入了一个旧版本的Json字符串。因为自己打Json字符串时犯了一个错误:p,这是个大失误。 - JamesYTL

0
你需要使用GSON库,例如:
@SerializedName("studentName") public String name;

0

需要在上面第一个答案(thealeksandr)中添加一个有点缺失的功能:

 Gson gson = new GsonBuilder().create();

您现在可以在上述代码中使用实例化对象gson, 如ClassObj object = gson.fromJson(jsonString, ClassObj.class); 要做到这一点,只需像我刚刚演示的那样,在Gson Library中使用GsonBuilder类。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接