这是我的安缦类(class):
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown=true)
public class Aman
{
public static class Title
{
private String title;
public String getTitle(){ return title; }
public String setTitle(String s){ return title = s; }
}
private int id;
private int year;
private int total;
public void id(int i){ id = i; }
public void year(int y){ year = y; }
public void total(int t){ total =t; }
}
这是映射值的 Movie 类:
import java.io.File;
import java.io.IOException;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import java.net.*;
public class Movie
{
public static void main(String[] args) throws MalformedURLException, URISyntaxException, IOException {
Aman a = new Aman();
ObjectMapper mapper = new ObjectMapper();
URL RT = new URL("http://api.rottentomatoes.com/api/public/v1.0/movies.json?apikey=gzscv4f8zqse75w94mmp37zz&q=Toy+Story+3&page_limit=1").toURI().toURL();
a = mapper.readValue(RT, Aman.class);
}
}
我一次又一次地遇到同样的异常。
我做错了什么吗?
这是不断发生的异常:
异常:线程“main”中的异常 org.codehaus.jackson.map.exc.UnrecognizedPropertyException:无法识别的字段“total”(Aman 类),未标记为可忽略
在[来源:http://api.rottentomatoes.com/api/public/v1.0/movies.json?apikey=gzscv4f8zqse75w94mmp37zz&q=Toy+Story+3&page_limit=1;行:31,列:11](通过引用链:Aman[“total”])
最佳答案
在 Aman
类的顶部,添加以下注释 - @JsonIgnoreProperties(unknown=true)
。也就是说,或者实际上将 JSON 中存在的所有属性映射为类中的属性。
@JsonIgnoreProperties(ignoreUnknown=true)
class Aman {
// properties
}
Jackson FasterXML Wiki 中描述了管理非映射属性的一些其他选项。 .
编辑:
根据您的评论,您映射 JSON 的数据类也没有任何属性。这是行不通的。我建议阅读 5 Minute Jackson Tutorial在 FasterXML 上,但映射的一般要点是:
给定 JSON 文档:
{
"message" : "Hi, I am a JSON object",
"sender" : "Bob"
}
和 Java 对象:
@JsonIgnoreProperties(unknown=true)
class Post {
private String message;
}
您可以使用 Jackson 编写以下代码将 JSON 映射到对象:
final ObjectMapper mapper = new ObjectMapper();
final Post post = mapper.readValue(json, Post.class);
假设 json
是包含所示 JSON 数据的字符串
Jackson 会将 JSON 中的属性映射到 Java 对象中的属性。在所示示例中,JSON 中有一个名为 sender
的附加属性。通常,如果 Java 对象上没有同名的相应属性,则库会抛出异常,但使用 @JsonIgnoreProperties(unknown=true) 注释此行为将被覆盖,并且反序列化继续。
因此,您需要定义一个 Aman
类,该类的属性与烂番茄 API 发送给您的 JSON 相匹配。
关于java - 如何从 Java 中的 URL 读取 JSON 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16003051/