Java 使用GSON将2djson数组反序列化为bean

Java 使用GSON将2djson数组反序列化为bean,java,json,multidimensional-array,gson,Java,Json,Multidimensional Array,Gson,我无法将这个嵌套数组行->元素映射到我的javabean。gson真的能够处理这种映射吗?我还尝试了一种不同的方法,如果您查看注释掉的Java代码,就可以看到这种方法 package scratch; import java.util.ArrayList; import java.util.List; /* { "rows" : [ { "elements" : [ { "distance" : { "tex

我无法将这个嵌套数组行->元素映射到我的javabean。gson真的能够处理这种映射吗?我还尝试了一种不同的方法,如果您查看注释掉的Java代码,就可以看到这种方法

package scratch;

import java.util.ArrayList;
import java.util.List;

/*
{
  "rows" : [
  {
     "elements" : [
        {
           "distance" : {
              "text" : "897 mi",
              "value" : 1443464
           },
           "duration" : {
              "text" : "14 hours 32 mins",
              "value" : 52327
           },
           "status" : "OK"
        }
     ]
  },
  {
     "elements" : [
        {
           "distance" : {
              "text" : "378 mi",
              "value" : 607670
           },
           "duration" : {
              "text" : "6 hours 22 mins",
              "value" : 22908
           },
           "status" : "OK"
        }
     ]
  }
]

}
*/

public class GeoZipCodesBean2 {

    //    private Elem[][] rows;

    //    public Elem[][] getRows() {
    //        return rows;
    //    }
    //
    //    public void setRows(Elem[][] rows) {
    //        this.rows = rows;
    //    }

    private List<List<Elem>>rows;

    public List<List<Elem>> getRows() {
        return rows;
    }

    public void setRows(List<List<Elem>> rows) {
        this.rows = rows;
    }



    public static class Elem {
        private Distance distance;
        private Duration duration;

        public Distance getDistance() {
            return distance;
        }

        public void setDistance(Distance distance) {
            this.distance = distance;
        }

        public Duration getDuration() {
            return duration;
        }

        public void setDuration(Duration duration) {
            this.duration = duration;
        }
    }

    public static class Distance {
        private String text;
        private Integer value;

        public String getText() {
            return text;
        }

        public void setText(String text) {
            this.text = text;
        }

        public Integer getValue() {
            return value;
        }

        public void setValue(Integer value) {
            this.value = value;
        }
    }

    public static class Duration {
        private String text;
        private Integer value;

        public String getText() {
            return text;
        }

        public void setText(String text) {
            this.text = text;
        }

        public Integer getValue() {
            return value;
        }

        public void setValue(Integer value) {
            this.value = value;
        }
    }
}

GeoZipCodesBean2 geoZipCodesBean2 = new Gson().fromJson(str, GeoZipCodesBean2.class);
包装划痕;
导入java.util.ArrayList;
导入java.util.List;
/*
{
“行”:[
{
“要素”:[
{
“距离”:{
“文本”:“897英里”,
“价值”:1443464
},
“期限”:{
“文本”:“14小时32分钟”,
“价值”:52327
},
“状态”:“确定”
}
]
},
{
“要素”:[
{
“距离”:{
“文本”:“378英里”,
“价值”:607670
},
“期限”:{
“文本”:“6小时22分钟”,
“价值”:22908
},
“状态”:“确定”
}
]
}
]
}
*/
公共类GeoZipCodesBean2{
//私有元素[][]行;
//公共元素[][]获取行(){
//返回行;
//    }
//
//公共void集合行(元素[][]行){
//this.rows=行;
//    }
私有列表行;
公共列表getRows(){
返回行;
}
公共无效集合行(列表行){
this.rows=行;
}
公共静态类元素{
私人距离;
私人期限;
公共距离getDistance(){
返回距离;
}
公共空隙设置距离(距离){
这个距离=距离;
}
公共持续时间getDuration(){
返回时间;
}
公共无效设置持续时间(持续时间){
这个。持续时间=持续时间;
}
}
公共静态类距离{
私有字符串文本;
私有整数值;
公共字符串getText(){
返回文本;
}
公共void setText(字符串文本){
this.text=文本;
}
公共整数getValue(){
返回值;
}
公共无效设置值(整数值){
这个值=值;
}
}
公共静态课程时长{
私有字符串文本;
私有整数值;
公共字符串getText(){
返回文本;
}
公共void setText(字符串文本){
this.text=文本;
}
公共整数getValue(){
返回值;
}
公共无效设置值(整数值){
这个值=值;
}
}
}
GeoZipCodesBean2 GeoZipCodesBean2=new Gson().fromJson(str,GeoZipCodesBean2.class);

这应该是
GeoZipCodesBean2
对象的JSON格式(如果
列表

这是用于转换为json或从json转换为json的代码

public static void main(String[] args) {
    Gson gson = new GsonBuilder().create();
    GeoZipCodesBean2 geo = new GeoZipCodesBean2();
    List<List<Elem>> rows = new ArrayList<List<Elem>>();
    List<Elem> elem = new ArrayList<Elem>();
    Elem e1 = new Elem();
    Distance d = new Distance();
    d.setText("fads");
    d.setValue(1234);
    e1.setDistance(d);
    elem.add(e1);
    rows.add(elem);
    geo.setRows(rows);
    String json = gson.toJson(geo);
    //The following prints {"rows":[[{"distance":{"text":"fads","value":1234}}]]}
    System.out.println(json);
    json = "{\"rows\":[[{\"distance\":{\"text\":\"fads\",\"value\":1234}, \"status\":\"OK\"}]]}";
    GeoZipCodesBean2 geo2 = gson.fromJson(json, GeoZipCodesBean2.class);
    //The following prints 1234
    System.out.println(geo2.getRows().get(0).get(0).getDistance().getValue());
}
publicstaticvoidmain(字符串[]args){
Gson Gson=new GsonBuilder().create();
GeoZipCodesBean2 geo=新的GeoZipCodesBean2();
列表行=新建ArrayList();
List elem=new ArrayList();
元素e1=新元素();
距离d=新距离();
d、 setText(“时尚”);
d、 设定值(1234);
e1.设定距离(d);
元素添加(e1);
行。添加(elem);
geo.setRows(rows);
字符串json=gson.toJson(geo);
//以下打印{“行”:[[{“距离”:{“文本”:“fads”,“值”:1234}]}
System.out.println(json);
json=“{\'rows\':[[{\'distance\':{\'text\':\'fads\',\'value\':1234},\'status\':\'OK\'}]}”;
GeoZipCodesBean2 geo2=gson.fromJson(json,GeoZipCodesBean2.class);
//以下打印1234
System.out.println(geo2.getRows().get(0.get(0.getDistance().getValue());
}

查看json,
指向元素列表,而不是元素列表。可能是json生成部分有一些问题。此外,json中还有一些错误。结尾有一个逗号。您可以在这里@Narendra验证json,行是一个数组,元素也是一个数组。所以它实际上是一个2D数组。你的代码说,
是一个
列表
。你是对的。这个JSON对于我当前的代码是正确的,这意味着我的Java代码对于原始JSON是错误的。事实上,最初我的实例变量是“private Listrows”,但即使这两个元素被GSON实例化,它们内部的距离和持续时间都保持为null——我不知道为什么会发生这种情况。当我使用gson时,我必须将JSON中的所有内容映射到bean吗?实际上,还有其他字段我忽略了。除了我放在“Elem”中的字段(距离和持续时间)之外,所有内容都被初始化。@Onur添加的代码看起来距离对象被正确初始化了。这不是针对原始JSON tho的。这不适用于我发布的原始JSON。我的当前代码在这里有“Listrows”。我需要它来处理原始的JSON。这是我的测试类@Onur,问题是json和对象结构不匹配。解决json问题后,代码将如下所示。您必须更改对象结构以匹配GoogleMapAPI返回的json。
public static void main(String[] args) {
    Gson gson = new GsonBuilder().create();
    GeoZipCodesBean2 geo = new GeoZipCodesBean2();
    List<List<Elem>> rows = new ArrayList<List<Elem>>();
    List<Elem> elem = new ArrayList<Elem>();
    Elem e1 = new Elem();
    Distance d = new Distance();
    d.setText("fads");
    d.setValue(1234);
    e1.setDistance(d);
    elem.add(e1);
    rows.add(elem);
    geo.setRows(rows);
    String json = gson.toJson(geo);
    //The following prints {"rows":[[{"distance":{"text":"fads","value":1234}}]]}
    System.out.println(json);
    json = "{\"rows\":[[{\"distance\":{\"text\":\"fads\",\"value\":1234}, \"status\":\"OK\"}]]}";
    GeoZipCodesBean2 geo2 = gson.fromJson(json, GeoZipCodesBean2.class);
    //The following prints 1234
    System.out.println(geo2.getRows().get(0).get(0).getDistance().getValue());
}