java - 如何从 Java 中的 URL 读取 JSON 数据?

标签 java json jackson

这是我的安缦类(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/

相关文章:

java - Arquillian glassfish-managed 测试 Absent Code 属性错误

java - JDBC 附加程序的 Log4j2 MDC 配置

使用 Jackson 将 Java 映射到 JSON { "key":"value","key1":"value1"} 作为 "key":value, "key1":"value1"

java - 反序列化 Yaml 对象列表

java - 服务注册为类型,并实现接口(interface),但不能用作类型

java - 为什么 Object.equals() 的实现没有使用 hashCode()?

python - 将 AttributeError : 'list' object has no attribute 'split' while converting the . 日志文件格式化为 .json 格式

javascript - 访问 JSON 中的属性(对象)

c# - 解析 Json 返回字符串还是字符串数组?

Kotlin:带有 TypeReference<HashMap<String, String>> 的 objectmapper.readValue() 无法推断参数