Android 如何通过GSON解析嵌套数组
例如,我想通过android中的GSON解析JSON响应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
{
"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,这个语句中的返回值是一个字符串。它通过调用newGsonBuilder().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”值,我将如何获得它??