JSON,数字解析为模型

时间:2015-03-31 08:43:14

标签: java json gson

我想解析来自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有什么想法吗? 也许不同的库? 谢谢!

2 个答案:

答案 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;
}