Gson嵌套在嵌套对象中的对象

时间:2016-12-02 22:17:54

标签: java arrays json nested gson

我知道这个问题经常被提出来,但到目前为止我并没有真正找到帮助我解决问题的答案(我试过了一些问题)。

基本上我从这个API http://api.tvmaze.com/singlesearch/shows?q=izombie&embed=episodes获得了一个JSON-Response,嵌套对象中有很多嵌套对象。例如,使用JSON在线查看器查看它可以得到以下输出: 对我来说有趣的是底部。更具体的是“剧集”对象。到目前为止,我可以从JSON-Array(id,url,name,type,...)中提取基本信息,但无法获得“triple(_embedded> episodes> ...)”嵌套对象。

解析JSON-Response的代码:

public void parseJSON(String jsonResponse) throws IOException {
    GsonBuilder builder = new GsonBuilder();
    Gson gson = builder.create();
    Show show = gson.fromJson(jsonResponse, Show.class);
    System.out.println(show.getID() + "\n" + show.getName() + "\n" + show.getStatus());
}

Show类:

public class Show {
    private int id;
    private String name;
    private String status;


    public int getID() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getStatus() {
        return status;
    }
}

那么如何从剧集数组中获取从0到结尾的所有信息?非常感谢任何帮助!

旁注:我正在使用名为“readUrl”的方法获取jsonResponse,但它现在几乎无关紧要。

1 个答案:

答案 0 :(得分:1)

GSON处理嵌入式对象就好了。假设您有一个嵌入了Bar的Foo类,您只需要

capture program drop Wilcoxon3
program define Wilcoxon3, eclass 
    version 13

    syntax varlist [if] [in], by(varname)
    marksample touse

    local names
    foreach v of varlist `varlist' {
        ranksum `v' if `touse', by(`by')
        matrix b = nullmat(b), 1
        matrix p = nullmat(p), 2*normprob(-abs(r(z)))
        local names `names' "`v'"

    }
    matrix colnames p = `names'

    // store results 
    ereturn post b
    ereturn matrix p

end

sysuse auto, clear
eststo clear

/* store means and t-tests */
estpost summarize price weight if !foreign
eststo

estpost summarize price weight if foreign
eststo

estpost ttest price weight, by(foreign)
eststo

/* /1* try to store rank-sum test *1/ */
/* Wilcoxon3 price weight, by(foreign) */
/* eststo */


/* table of means and t-tests */
esttab, cells("mean(pattern(1 0 0) fmt(3) label(!Foreign)) mean(pattern(0 1 0) fmt(3) label(Foreign)) p(star pattern(0 0 1) fmt(3) label(p))")

/* /1* try table of means, t-tests, and rank-sum tests *1/ */
/* esttab, cells("mean(pattern(1 0 0 0) fmt(3) label(!Foreign)) mean(pattern(0 1 0 0) fmt(3) label(Foreign)) p(star pattern(0 0 1 0) fmt(3) label(p)) p(star pattern(0 0 0 1) fmt(3) label(p))") */

它会为你解析吧。这是递归的。如果需要数组,请使用class Foo { public Bar bar; } ,它将解析数组。