Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Json程序不显示任何输出_Java_Json - Fatal编程技术网

Java Json程序不显示任何输出

Java Json程序不显示任何输出,java,json,Java,Json,我想做的是,当我导航到: http://api.rottentomatoes.com/api/public/v1.0/movies.json?apikey=[your_api_key]&q=Toy+Story+3&page_limit=1 它返回一个JSON响应。我想把它转换成Java对象。我正在使用杰克逊图书馆。这是我的数据类: import org.codehaus.jackson.annotate.JsonIgnoreProperties; @JsonIgnoreProperties(i

我想做的是,当我导航到:

http://api.rottentomatoes.com/api/public/v1.0/movies.json?apikey=[your_api_key]&q=Toy+Story+3&page_limit=1

它返回一个JSON响应。我想把它转换成Java对象。我正在使用杰克逊图书馆。这是我的数据类:

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 SetId(int i){ id = i; }

public void SetYear(int y){ year = y; }

public void SetTotal(int t){ total =t; }

public int GetId()
{
    return id;
}

public int GetYear()
{
    return year;
}

public int GetTotal()
{
    return total;
}
@Override
public String toString()
{
    return "Movies[total=" +total + "id=" + id + "year=" + year + "]";
}
}
还有我的mapper类:

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();
 try
 {
 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);
    }catch(MalformedURLException u)
    {
        u.printStackTrace();
    }catch(URISyntaxException s)
    {
        s.printStackTrace();
    }catch(IOException i)
    {
        i.printStackTrace();
    }

}
}

它没有显示任何输出。我做错什么了吗?

您混合了一些基本的Java编程和JSON映射错误。首先,请记住在定义Java类时要遵循以下步骤。这不仅是一种最佳实践,而且更重要的是,如果不遵循此模式(包括Jackson),一些工具和库将无法运行

就JSON映射错误而言,将JSON映射到Java对象时要记住的最重要的一点是,JSON数据实际上是一个映射。它将键与值关联,其中值可以是基元、对象或数组(集合)。因此,给定一个JSON结构,您必须查看每个键值的结构,然后确定该值在Java中应该表示为原语、对象还是数组。没有捷径,你会从经验中学习。以下是一个例子:

{
    "total": 1,                          // maps to primitive, integer
    "movies": [                          // '[' marks the beginning of an array/collection
        {                                // '{' marks the beginning of an object
            "id": "770672122",           // maps to primitive, string
            "title": "Toy Story 3",
            "year": 2010,
            "mpaa_rating": "G",
            "runtime": 103,
            "release_dates": {          // each array object also contains another object
                "theater": "2010-06-18",
                "dvd": "2010-11-02"
            }
        }
    ]
}
映射上面的示例JSON时,需要定义一个与最外层的
{
匹配的根对象。让我们将此根对象称为
MovieResponse

public class MovieResponse {
}
现在,沿着JSON数据,我们开始将所有JSON属性映射到Java属性:

@JsonIgnoreProperties(ignoreUnknown = true)
public class MovieResponse {
    private Integer total;        // map from '"total": 1'
    private List<Movie> movies;   // map from '"movies": [', remember, its a collection
}
最后,映射表示发布日期的最内部对象:

public class Release {
    private String theater;
    private String dvd;
}
就是这样,非常简单。请注意在
Movie
类中使用了
@JsonProperty
。它允许您使用不同的名称将JSON中的属性映射到Java中的属性。还请注意,为了简洁起见,上面的每个类中都省略了构造函数/设置器/获取器。在实际代码中,您可以将它们添加进来。最后,使用以下代码将示例JSON映射到Java
MovieResponse
类:

MovieResponse response = new ObjectMapper().readValue(json, MovieResponse.class);

如果读取成功,则没有任何代码可以输出任何内容。读取值后,执行类似于
System.out.println(a.GetId());
的操作,或者在Aman类和
System.out.println(a)中重写
toString()
@digitaljoel我编辑了代码,你可以在问题中看到它,但仍然没有输出。好吧,我能说的是,这就是我想要的完整解释,我知道我问了一些愚蠢的问题,但我只是一个初学者。非常感谢。当我必须制作一部新的类电影并将其值映射到那里时,Listmovies有什么用@AmanGrover-因为在我使用的示例和您从RT返回的数据中,JSON可以包含每个响应的多个电影。记住-JSON数组映射到Java集合。我如何映射电影列表?@AmanGrover-该示例准确地显示了如何映射给定JSON的电影列表。请再次阅读。
MovieResponse response = new ObjectMapper().readValue(json, MovieResponse.class);