如何通过GSON解析嵌套数组

时间:2014-06-27 11:03:41

标签: 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();
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;
   }

我的lang课程

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

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

1 个答案:

答案 0 :(得分:1)

试试这个,虽然这不是一种优雅的方式。但至少,它可以完成任务。

您以前的代码的问题是GSON认为JSON字符串中的spoken_languages是一个数组,因此您必须创建类似于数组的内容才能反映出来。 在这里我选择一个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 + '\'' +
                    '}';
        }
    }
}