Android 如何通过GSON解析嵌套数组

Android 如何通过GSON解析嵌套数组,android,json,Android,Json,例如,我想通过android中的GSON解析JSON响应 { "adult": false, "budget": 63000000, "spoken_languages": [ { "iso_639_1": "en", "name": "English" } ], } 这是头等舱 public Detail parseDetailResponse(InputStream json) { Gson gson = new Gson

例如,我想通过android中的GSON解析JSON响应

 {
  "adult": false,
  "budget": 63000000,
  "spoken_languages": [
    {
      "iso_639_1": "en",
      "name": "English"
    }
  ],
}     
这是头等舱

public Detail parseDetailResponse(InputStream json) {
Gson gson = new Gson();
Reader reader=new InputStreamReader(json);
Detail handle = gson.fromJson(reader, Detail.class);
return handle;

}
类来解析此

public class Detail implements Serializable{
private static final long serialVersionUID = -6814886315783830255L;

@SerializedName("adult")
public boolean Adult;
    @SerializedName("spoken_languages")
public lang[] Languages;
   }
我的语言课

public class lang implements Serializable{
private static final long serialVersionUID = -6814886315783830255L;
@SerializedName("name")
public String Name;
}

现在我想要lang.name的值,但它给出了null指针异常。。请帮助我如何得到这个值…

试试这个,尽管这不是一个优雅的方式。但至少,它能把事情办好

您以前的代码的问题是,GSON认为JSON字符串中的
口语
是一个数组,因此您必须至少创建一个数组来进行反射。 这里我选择了一个ArrayList。希望你的问题能得到解决

import com.google.gson.GsonBuilder;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class SimpleTest {
    public static void main(String[] args) {
        String json = "{\n" +
                "  \"adult\": false,\n" +
                "  \"budget\": 63000000,\n" +
                "  \"spoken_languages\": [\n" +
                "    {\n" +
                "      \"iso_639_1\": \"en\",\n" +
                "      \"name\": \"English\"\n" +
                "    }\n" +
                "  ]\n" +
                "}     ";

        System.out.println(new SimpleTest().parseDetailResponse(new ByteArrayInputStream(json.getBytes())));
    }

    public Detail parseDetailResponse(InputStream json) {
        return new GsonBuilder().create().fromJson(new InputStreamReader(json), Detail.class);
    }

    class Detail {
        private boolean adult;
        private long budget;
        private ArrayList<SpokenLanguages> spoken_languages;

        public Detail() {

        }

        @Override
        public String toString() {
            return "DAO{" +
                    "adult=" + adult +
                    ", budget=" + budget +
                    ", spoken_languages=" + spoken_languages +
                    '}';
        }

        public boolean isAdult() {
            return adult;
        }

        public void setAdult(boolean adult) {
            this.adult = adult;
        }

        public long getBudget() {
            return budget;
        }

        public void setBudget(long budget) {
            this.budget = budget;
        }

        public List<SpokenLanguages> getSpoken_languages() {
            return spoken_languages;
        }

        public void setSpoken_languages(ArrayList<SpokenLanguages> spoken_languages) {
            this.spoken_languages = spoken_languages;
        }
    }

    class SpokenLanguages {
        private String name;
        private String iso_639_1;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getIso_639_1() {
            return iso_639_1;
        }

        public void setIso_639_1(String iso_639_1) {
            this.iso_639_1 = iso_639_1;
        }

        @Override
        public String toString() {
            return "SpokenLanguages{" +
                    "name='" + name + '\'' +
                    ", iso_639_1='" + iso_639_1 + '\'' +
                    '}';
        }
    }
}
import com.google.gson.GsonBuilder;
导入java.io.ByteArrayInputStream;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.util.ArrayList;
导入java.util.List;
公共类SimpleTest{
公共静态void main(字符串[]args){
字符串json=“{\n”+
“成人”:错误,\n+
“预算”:63000000\n+
“\“口语\\”:[\n”+
“{\n”+
“\“iso\U 639\U 1\:\“en\”,\n”+
“\”姓名\“:\”英文\“\n”+
“}\n”+
“]\n”+
"}     ";
System.out.println(新的SimpleTest().parseDetailResponse(新的ByteArrayInputStream(json.getBytes()));
}
公共详细信息parseDetailResponse(InputStream json){
返回新的GsonBuilder().create().fromJson(新的InputStreamReader(json),Detail.class);
}
课堂细节{
私人布尔成人;
私人长期预算;
私人ArrayList口语;
公开详情(){
}
@凌驾
公共字符串toString(){
返回“DAO{”+
“成人=”+成人+
“,budget=“+预算+
“,口语=”+口语+
'}';
}
公共布尔值isAdult(){
返回成人;
}
公共无效设置成人(布尔成人){
这个。成人=成人;
}
公共长期预算(){
回报预算;
}
公共预算(长期预算){
这个.预算=预算;
}
公共语言列表{
返回口语;
}
公共语言(ArrayList口语){
this.speaked_languages=speaked_languages;
}
}
类Spoken语言{
私有字符串名称;
专用字符串iso_639_1;
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getIso_639_1(){
返回iso_639_1;
}
公共无效集iso_639_1(字符串iso_639_1){
这个.iso_639_1=iso_639_1;
}
@凌驾
公共字符串toString(){
返回“SpokenLanguages{”+
“name=”+name+“\”+
“,iso_639_1=”+iso_639_1+“\”+
'}';
}
}
}

这是您的完整JSON还是一个条目?@lzzy Leung感谢您的回复。。。但是先生,SimpleTest类的main方法中的return语句是什么,就像在我的代码中一样,我正在返回Detail类的object???@dheeraj92 Ha,这个语句中的返回值是一个
字符串。它通过调用new
GsonBuilder().create().fromJson(JSON,DAO.class)
从JSON字符串中反映对象,然后,我调用对象的
toString()
方法,生成一个表示它的字符串。我调用
System.out.println()
以表明GSON已成功地反映了对象。@lzzy Leung您在相应的类中创建了toString方法并打印了值,但我希望这些值在其他类中。。。如果返回的是字符串,那么我将如何得到这些值。。。请编写我的问题中提到的修改过的parseDetailResponse()方法???@dheeraj92 Done!;-)现在,请参考编辑后的代码。我希望它在您的情况下可以正常工作。@lzzy Leung谢谢,先生,通过Detail.get成人()和Detail.getBudget()给出值,但现在我想要SpokenLanguage()的唯一“name”值,我将如何获得它??