【问题标题】:JSON with numbers parsing to model带有数字解析到模型的 JSON
【发布时间】:2015-06-04 12:48:59
【问题描述】:

我想解析来自网络服务提供商的 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 } ] }

所以数据模型类应该是这样的:

`公共类AaData { 私有字符串 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+"]";
}}

公共类司法管辖区 { 私有 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 有什么想法吗? 也许不同的图书馆? 谢谢!

【问题讨论】:

  • 这个映射对我来说看起来不错。

标签: java json gson


【解决方案1】:

我认为这需要SerializedName 注释。

代替:

private String 1;

举例:

@SerializedName("1") private final String fieldOne;

【讨论】:

  • 谢谢!!很有用。
【解决方案2】:

这样的事情可能会对你有所帮助:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    • 2016-04-25
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多