GSON用成员ArrayList <string>

时间:2018-08-09 17:55:24

标签: java json list gson deserialization

我看过很多类似的问题。我找不到适合我确切问题的任何东西。在所有示例中,我发现List是在父类中定义的对象类型,而我只有一个Strings列表。我尝试使用简单的数组String [],并且看到了带有重载反序列化程序并获得TypeToken的示例,但我无法将其捆绑在一起以完成这项工作。我的列表始终为空(如果定义列表时未初始化,则为null)。我在这里缺少什么,感觉就像我在尝试做一些非常简单的事情,但是我发现的所有内容看起来都过于复杂。

这是我的课程:

public class MondoConfig {
private String merchantURL;
public ArrayList<String> targets = new ArrayList<String>();


public MondoConfig () {}

public String getMerchantURL() {
    return this.merchantURL;
}

public void setMerchantURL(String url) {
    this.merchantURL = url;
}

public ArrayList<String> getTargets() {
    return this.targets;
}

public void setTargets(ArrayList<String> t) {
    this.targets = t;


}
}

这是我的json:

{
"merchantURL":"https://example.com/collections/posters",
"targets":[
"testing",
"another",
"one more"
]
}

我要反序列化的代码:

BufferedReader br = new BufferedReader(new FileReader("C:\\mondo_config.json"));
MondoConfig config = gson.fromJson(br, MondoConfig.class);

1 个答案:

答案 0 :(得分:1)

我在您的代码中看到了一些问题,但是我能够使其正常运行而没有任何问题。

package org.nuttz.gsonTest;
import java.util.ArrayList;

public class MondoConfig {
   private String merchantURL;
   public ArrayList<String> targets = new ArrayList<String>();

   MondoConfig () {}

   public String getMerchantURL() {
      return this.merchantURL;
   }

   public void setMerchantURL(String url) {
      this.merchantURL = url;
   }

   public ArrayList<String> getTargets() {
      return this.targets;
   }

   public void setTargets(ArrayList<String> t) {
      this.targets = t;
   }
}

原始代码中的setMerchantURL()函数不太正确,因此我对其进行了修复。然后,我使用以下代码对其进行了测试:

package org.nuttz.gsonTest;

import java.io.*;
import java.util.List;
import com.google.gson.*;

public class App 
{
    public static void main( String[] args )
    {
       Gson gson = new Gson();
       try {
          BufferedReader br = new BufferedReader(new FileReader("/home/jim/mondoconfig.json"));
          MondoConfig config = gson.fromJson(br, MondoConfig.class);
          System.out.println("Contents of config:");
          System.out.println(config.getMerchantURL());
          List<String> targets = config.targets;
          for (String t : targets) {
             System.out.println(t);
          }
       }
       catch (Exception x) {
          x.printStackTrace();
       }
    }
}

并得到以下结果:

Contents of config:
https://example.com/collections/posters
testing
another
one more

这使用的是GSON的2.8.2版本。换句话说,您处在正确的轨道上,只需要修复MondoConfig类即可。