Java 如何在改型中从json对象密钥中删除空白?

Java 如何在改型中从json对象密钥中删除空白?,java,android,json,retrofit2,android-lifecycle,Java,Android,Json,Retrofit2,Android Lifecycle,我有一个带空格的字符串。如何消除改装中的空白。在下面的回复中,您可以看到“Poster”和“Poster”(有空格) 在改型过程中,在哪里需要处理这个json键来删除空白 { "movies": [{ "Title": "TheAvengers ", "Year": "2012 ", "Rated": "PG-13 ", "Genre": "Action, Adventure, Sci-Fi ", "Acto

我有一个带空格的字符串。如何消除改装中的空白。在下面的回复中,您可以看到“Poster”和“Poster”(有空格)

在改型过程中,在哪里需要处理这个json键来删除空白

{
    "movies": [{
        "Title": "TheAvengers ",
        "Year": "2012 ",
        "Rated": "PG-13 ",
        "Genre": "Action, Adventure, Sci-Fi ",
        "Actors": "Robert Downey Jr., Chris Evans, Mark Ruffalo, Chris Hemsworth ",
        "Plot": "Earth's mightiest heroes must come together and learn to fight as a team if they are going to stop the mischievous Loki and his alien army from enslaving humanity. ",
        "Language": "English, Russian, Hindi ",
        "Country": "USA ",
        "Poster": "https://m.media-amazon.com/images/M/MV5BNDYxNjQyMjAtNTdiOS00NGYwLWFmNTAtNThmYjU5ZGI2YTI1XkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_SX300.jpg ",
        "Released": "04 May 2012 ",
        "Runtime": "143 min ",
        "Director": "Joss Whedon ",
        "Writer": "Joss Whedon (screenplay), Zak Penn (story), Joss Whedon (story) ",
        "Awards": "Nominated for 1 Oscar. Another 38 wins \u0026 79 nominations. "
    }, {
        "Title": "Sleepless ",
        "Year": "2017 ",
        "Rated": "R ",
        "Released": "13Jan 2017 ",
        "Runtime": "95 min ",
        "Genre": "Action, Crime, Thriller ",
        "Director": "Baran bo Odar ",
        "Writer": "Andrea Berloff (screenplay by), Frédéric Jardin (based on the film    Nuit blanche written by), Nicolas Saada (based on the film Nuit blanche written by), Olivier Douyère (based on the film    Nuit blanche   written by)",
        "Actors": "Jamie Foxx, Michelle Monaghan, Scoot McNairy, Dermot Mulroney ",
        "Plot": "A cop with a connection to the criminal underworld scours a nightclub in search of his kidnapped son. ",
        "Language": "English ",
        "Country": "USA ",
        "Awards": "1 nomination. ",
        "Poster ": "https://m.media-amazon.com/images/M/MV5BNjEwMDAyOTM4OV5BMl5BanBnXkFtZTgwMzc4MjMyMDI@._V1_SX300.jpg "
    }]}
下面是我所做的代码,我被挂在需要删除海报空白的地方

Pojo类:

public class Movies implements Serializable {
    @SerializedName("Title")
    private String Title;
    @SerializedName("Year")
    private String Year;
    @SerializedName("Rated")
    private String Rated;
    @SerializedName("Released")
    private String Released;
    @SerializedName("Runtime")
    private String Runtime;
    @SerializedName("Genre")
    private String Genre;
    @SerializedName("Director")
    private String Director;
    @SerializedName("Writer")
    private String Writer;
    @SerializedName("Actors")
    private String Actors;
    @SerializedName("Plot")
    private String Plot;
    @SerializedName("Language")
    private String Language;
    @SerializedName("Country")
    private String Country;
    @SerializedName("Awards")
    private String Awards;
    @SerializedName("Poster")
    private String Poster;


    // Getter Methods

    public String getTitle() {
        return Title;
    }

    public String getYear() {
        return Year;
    }

    public String getRated() {
        return Rated;
    }

    public String getReleased() {
        return Released;
    }

    public String getRuntime() {
        return Runtime;
    }

    public String getGenre() {
        return Genre;
    }

    public String getDirector() {
        return Director;
    }

    public String getWriter() {
        return Writer;
    }

    public String getActors() {
        return Actors;
    }

    public String getPlot() {
        return Plot;
    }

    public String getLanguage() {
        return Language;
    }

    public String getCountry() {
        return Country;
    }

    public String getAwards() {
        return Awards;
    }

    public String getPoster() {
        return Poster == null ? Uri.parse("R.drawable.ic_launcher_background").toString() : Poster;
    }

    // Setter Methods

    public void setTitle(String Title) {
        this.Title = Title;
    }

    public void setYear(String Year) {
        this.Year = Year;
    }

    public void setRated(String Rated) {
        this.Rated = Rated;
    }

    public void setReleased(String Released) {
        this.Released = Released;
    }

    public void setRuntime(String Runtime) {
        this.Runtime = Runtime;
    }

    public void setGenre(String Genre) {
        this.Genre = Genre;
    }

    public void setDirector(String Director) {
        this.Director = Director;
    }

    public void setWriter(String Writer) {
        this.Writer = Writer;
    }

    public void setActors(String Actors) {
        this.Actors = Actors;
    }

    public void setPlot(String Plot) {
        this.Plot = Plot;
    }

    public void setLanguage(String Language) {
        this.Language = Language;
    }

    public void setCountry(String Country) {
        this.Country = Country;
    }

    public void setAwards(String Awards) {
        this.Awards = Awards;
    }

    public void setPoster(String Poster) {
        this.Poster = Poster;
    }
}
电影责任:

public class MovieResponse implements Serializable {
    @SerializedName("movies")
    private List<Movies> movies;

    public List<Movies> getMovies() {
        return movies;
    }

    public void setMovies(List<Movies> movies) {
        this.movies = movies;
    }
}
失败案例2:(使用修剪,但这仅反映值,而不反映键)


尝试使用getter函数的优点

public String getTitle() {
        return Title.trim();
    }
其他人也一样。试着用这个,如果这无助于在评论中让m知道,我们会找到另一个解决方案

@SerializedName(value="Poster", alternate={"Poster ", "Pöster"})
String poster;


这似乎不起作用,请参阅注释,以了解具有相同名称的备选方案。

在项目中使用以下代码:

String strRemoveSpace= getPoster().toString().replaceAll("\\s", ""); // using built in method  
System.out.println(strRemoveSpace);  

让我从@JoopEggen的回答和评论中简化一下

应用两个字段时

 @SerializedName(value="Poster", alternate={"Poster ", "Pöster"})
  String poster;
它抛出“不能声明多个名为Poster的JSON字段”

那么解决方案是什么

//assign a dummy json field as images and replace with poster

@SerializedName(value = "Images", alternate = {"Poster"}) //no whitespace
    private String Images;


@SerializedName("Poster ") //with white space
    private String Poster;
在getter setter的适配器中处理这两个映像

   String poster= movies.get(position).getPoster(); //Poster with whitespace
    String image = movies.get(position).getImages(); //Poster without whitespace

我尝试了这个方法,但它只修复了值,而不修复键。我也尝试了这种方法。公共字符串getPoster(){return Poster==null?Uri.parse(“R.drawable.ic_launcher_background”).toString():Poster.trim()}为什么需要它来修剪键,值是有用的而不是键。有什么特别的吗?我使用了Title.trim,但在尝试对空对象referenceNo调用虚拟方法“java.lang.String java.lang.String.trim()”时出错。实际上,我需要从海报中访问url,但它有两个不同的海报,这就是问题所在。我使用了这个,但我遇到了崩溃,原因是:java.lang.IllegalArgumentException:class movie..demo.DataModel.Movies使用
alternate=“Poster”
声明了多个名为PosterJust的JSON字段?因此,它似乎在内部不起作用。对不起,还有其他的解决办法吗。我尝试了很多方法,但仍然找不到,我坚持了下来@乔普Eggen@Star抱歉,似乎有些转换器必须链接,只需在键上进行文本修剪。不知道如何改装,好的,没问题@祖蓓
@SerializedName(value="Poster", alternate={"Poster ", "Pöster"})
String poster;
String strRemoveSpace= getPoster().toString().replaceAll("\\s", ""); // using built in method  
System.out.println(strRemoveSpace);  
 @SerializedName(value="Poster", alternate={"Poster ", "Pöster"})
  String poster;
//assign a dummy json field as images and replace with poster

@SerializedName(value = "Images", alternate = {"Poster"}) //no whitespace
    private String Images;


@SerializedName("Poster ") //with white space
    private String Poster;
   String poster= movies.get(position).getPoster(); //Poster with whitespace
    String image = movies.get(position).getImages(); //Poster without whitespace