我想通过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的值,但它会给出空指针异常..请帮助我如何得到这个值......
答案 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 + '\'' +
'}';
}
}
}