Java 使用GSON将2djson数组反序列化为bean
我无法将这个嵌套数组行->元素映射到我的javabean。gson真的能够处理这种映射吗?我还尝试了一种不同的方法,如果您查看注释掉的Java代码,就可以看到这种方法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
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());
}