我试图解析以下网址:
http://api.crossref.org/works?rows=2
当我通过Gson解析它时,我得到了一些记录但不知何故其他一些记录null
。
这是我的代码:
BufferedReader in = new BufferedReader(new InputStreamReader(url_tdm.openStream(), "UTF-8"));
StringBuffer buffer = new StringBuffer();
int read;
char[] chars = new char[1024];
while ((read = in.read(chars)) != -1)
buffer.append(chars, 0, read);
String jsonLine = buffer.toString();
JsonReader reader = new JsonReader(new StringReader(jsonLine));
reader.setLenient(true); // this is for Malformed json
Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES).create();
Crossref answer = gson.fromJson(reader, Crossref.class );
List<Items> ao = answer.message.items;
public class Crossref {
public Message message;}
public class Message {
public List<Items> items;}
public class Items {
public List<String> containerTitle;
public List<String> ISSN;
public String publisher;
public List<String> title;
public String DOI;
public String type;}
因此,根据我上面的代码,我可以获得容器标题,发布者和标题值。但是ISSN和DOI都是空的。
我使用了FieldNamingPolicy
,因为&#34;容器标题&#34;包含一个破折号,我无法在java中为我的字段命名(所以我把它写成了驼峰案例containerTitle
)。
我不确定这会影响 DOI 和 ISSN 记录,这些记录是大写还是完全不同?
答案 0 :(得分:0)
解决此类问题的最佳方法是使用gson custom deserializer
我建议您阅读其他问题以查看一个很好的例子:How do I write a custom JSON deserializer for Gson?
你可以找到其他一些伟大的例子和解释here