我想解析来自Web服务提供商的JSON数据 在我的Web服务客户端中建模。我一直试图通过使用GSON库来做到这一点。问题听起来很简单,但JSON看起来像这样:
{
"aaData": [
{
"0": 23,
"1": "København",
"2": 1
},
{
"0": 10,
"1": "Esbjerg",
"2": 2
},
{
"0": 21,
"1": "Glostrup",
"2": 3
},
{
"0": 19,
"1": "Helsingør",
"2": 4
},
{
"0": 7,
"1": "Herning",
"2": 5
},
{
"0": 18,
"1": "Hillerød",
"2": 6
},
{
"0": "18A",
"1": "Hillerød (Frederikssund)",
"2": 7
},
{
"0": 1,
"1": "Hjørring",
"2": 8
},
{
"0": "1A",
"1": "Hjørring (Frederikshavn)",
"2": 9
},
{
"0": "1B",
"1": "Hjørring (Aabybro)",
"2": 10
},
{
"0": 16,
"1": "Holbæk",
"2": 11
},
{
"0": "16A",
"1": "Holbæk (Kalundborg)",
"2": 12
},
{
"0": 6,
"1": "Holstebro",
"2": 13
},
{
"0": "6B",
"1": "Holstebro (Thisted)",
"2": 15
},
{
"0": 8,
"1": "Horsens",
"2": 16
},
{
"0": 9,
"1": "Kolding",
"2": 17
},
{
"0": "9A",
"1": "Kolding (Vejle)",
"2": 19
},
{
"0": 20,
"1": "Lyngby",
"2": 20
},
{
"0": 14,
"1": "Nykøbing Falster",
"2": 21
},
{
"0": "14A",
"1": "Nykøbing Falster (Nakskov)",
"2": 22
},
{
"0": 15,
"1": "Næstved",
"2": 23
},
{
"0": "15A",
"1": "Næstved (Slagelse)",
"2": 24
},
{
"0": 12,
"1": "Odense",
"2": 25
},
{
"0": 3,
"1": "Randers",
"2": 26
},
{
"0": "3A",
"1": "Randers (Grenaa)",
"2": 27
},
{
"0": 17,
"1": "Roskilde",
"2": 28
},
{
"0": 13,
"1": "Svendborg",
"2": 29
},
{
"0": 11,
"1": "Sønderborg",
"2": 30
},
{
"0": "11C",
"1": "Sønderborg (Haderslev)",
"2": 31
},
{
"0": "11A",
"1": "Sønderborg (Tønder)",
"2": 32
},
{
"0": "11B",
"1": "Sønderborg (Aabenraa)",
"2": 33
},
{
"0": 5,
"1": "Viborg",
"2": 34
},
{
"0": "5A",
"1": "Viborg (Silkeborg)",
"2": 35
},
{
"0": 2,
"1": "Ålborg",
"2": 36
},
{
"0": 4,
"1": "Århus",
"2": 37
},
{
"0": "4A",
"1": "Århus (Samsø)",
"2": 38
},
{
"0": 24,
"1": "Bornholm",
"2": 39
},
{
"0": 22,
"1": "Frederiksberg",
"2": 40
},
{
"0": "22A",
"1": "Frederiksberg (Howitzvej)",
"2": 41
}
]
}
所以数据模型类应如下所示:
`public class AaData { private String 2;
private String 1;
private String 0;
public String get2 ()
{
return 2;
}
public void set2 (String 2)
{
this.2 = 2;
}
public String get1 ()
{
return 1;
}
public void set1 (String 1)
{
this.1 = 1;
}
public String get0 ()
{
return 0;
}
public void set0 (String 0)
{
this.0 = 0;
}
@Override
public String toString()
{
return "ClassPojo [2 = "+2+", 1 = "+1+", 0 = "+0+"]";
}}
和
公共类司法管辖区 { private AaData [] aaData;
public AaData[] getAaData ()
{
return aaData;
}
public void setAaData (AaData[] aaData)
{
this.aaData = aaData;
}
@Override
public String toString()
{
return "ClassPojo [aaData = "+aaData+"]";
}
}
所以问题是Java完全不喜欢用数字命名变量。 GSON有什么想法吗? 也许不同的库? 谢谢!
答案 0 :(得分:0)
我认为这需要SerializedName
注释。
而不是:
private String 1;
使用例如:
@SerializedName("1") private final String fieldOne;
答案 1 :(得分:0)
这样的事情可能会对你有所帮助:
private Object extractJsonNodeValueBasedOnNodeType(final JsonNode jsonNode) {
final JsonNodeType nodeType = jsonNode.getNodeType();
final Object nodeValue;
switch (nodeType) {
case NUMBER:
nodeValue = jsonNode.asLong();
break;
default:
nodeValue = jsonNode.asText();
break;
}
return nodeValue;
}