java - 使用 Gson 反序列化对象数组

标签 java json gson

我有一个 JSON 响应,如下所示。我想提取“文本”的值并将它们放入一组字符串中(即我不一定需要反序列化整个 JSON)。

我正在使用 GSON图书馆

到目前为止我的方法是这样的(这显然是错误的):

 public static Response deserialise(String json){
  Gson gson = new Gson();
  Response r = gson.fromJson(json, Response.class);
  return r;
 }

我用这个调用反序列化:

Response r = deserialise(json);
System.out.println("[status]: "+r.getStatus());  // works fine
        Collection<Keyword> coll = r.getKeywords();
        Iterator<Keyword> itr = coll.iterator();
        while(itr.hasNext()){
System.out.println(itr.next().getWord());        //prints null every time
 }

Response 是一个具有以下成员变量的类(具有 getter 和 setter):

private String status;
private String usage;
private String language;
private Collection<Keyword> keywords; 

关键字是一个具有以下成员变量(具有getters和setters)的类:

private String word;
private String relevance;

JSON 看起来像这样:

{
"status": "OK",
"usage": "By accessing AlchemyAPI or using information generated by AlchemyAPI, you are agreeing to be bound by the AlchemyAPI Terms of Use: http://www.alchemyapi.com/company/terms.html",
"url": "http://www.theage.com.au/world/aussie-trying-to-make-a-difference-gunned-down-20110510-1egnv.html",
"language": "english",
"keywords": [
    {
        "text": "Mr McNichols",
        "relevance": "0.99441"
    },
    {
        "text": "Ms Benton",
        "relevance": "0.392337"
    },
    {
        "text": "Detroit",
        "relevance": "0.363931"
    },
    {
        "text": "Crocodile Hunter",
        "relevance": "0.350197"
    }
    ]
}

问题是关键字集合返回空值 - 尽管它似乎具有正确的大小,这是正数。

最佳答案

这很管用:

public class Keyword {
    public String text;
    public String relevance;
}


public class MyJSON {
    public String status;
    public String usage;
    public String language;
    public Collection<Keyword> keywords;
}

在主要方法中

        String str = "{\"status\": \"OK\","+
        "\"usage\": \"By accessing AlchemyAPI or using information generated by AlchemyAPI, you are agreeing to be bound by the AlchemyAPI Terms of Use: http://www.alchemyapi.com/company/terms.html\","+
        "\"url\": \"http://www.theage.com.au/world/aussie-trying-to-make-a-difference-gunned-down-20110510-1egnv.html\","+
        "\"language\": \"english\","+
        "\"keywords\": ["+
            "{"+
                "\"text\": \"Mr McNichols\","+
                "\"relevance\": \"0.99441\""+
            "},"+
            "{"+
                "\"text\": \"Ms Benton\","+
                "\"relevance\": \"0.392337\""+
            "},"+
            "{"+
                "\"text\": \"Detroit\","+
                "\"relevance\": \"0.363931\""+
            "},"+
            "{"+
                "\"text\": \"Crocodile Hunter\","+
                "\"relevance\": \"0.350197\""+
            "}"+
            "]"+
        "}";

        Gson gson = new Gson();
        MyJSON mj = gson.fromJson(str, MyJSON.class);
        System.out.println(mj.language);
        for(Keyword k: mj.keywords)
            System.out.println(k.text+":"+k.relevance);

这打印

english
Mr McNichols:0.99441
Ms Benton:0.392337
Detroit:0.363931
Crocodile Hunter:0.350197

仔细看我的关键字类!(我的 JSON 字符串以 { 开头)。

关于java - 使用 Gson 反序列化对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5959620/

相关文章:

java - 使用 Gson 反序列化包含对象列表的 JSON

java - 如何将字节转换为blob

java - 安卓应用程序 : How to loadUrl in WebView from another class?

java - ArrayList#remove() 方法之间的区别

java - getIntent() 在第一个主要 Activity 中返回什么?

python - 如何通读 CSV 然后在 Python 中发布批量 API 调用

java - Android 正确的方法是 : where JSON response should be parsed - in UI thread, 还是另一个?

arrays - 使用结构变量数组访问结构变量golang

java - 使用GSON反序列化子节点

java - gson 抛出 MalformedJsonException