将Json字符串转换为对象数组

7

我有一个作为字符串的JSON数组

[
        {
        "id":"1",   
            "lat": "23.053",
            "long": "72.629",
            "location": "ABC",
            "address": "DEF",
            "city": "Ahmedabad",
            "state": "Gujrat",
            "phonenumber": "1234567"
        },
        {
        "id":"2",   
            "lat": "23.053",
            "long": "72.629",
            "location": "ABC",
            "address": "DEF",
            "city": "Ahmedabad",
            "state": "Gujrat",
            "phonenumber": "1234567"
        },
        {
            "id":"3",   
        "lat": "23.053",
            "long": "72.629",
            "location": "ABC",
            "address": "DEF",
            "city": "Ahmedabad",
            "state": "Gujrat",
            "phonenumber": "1234567"
        },
        {
            "id":"4",   
        "lat": "23.053",
            "long": "72.629",
            "location": "ABC",
            "address": "DEF",
            "city": "Ahmedabad",
            "state": "Gujrat",
            "phonenumber": "1234567"
        },
        {
            "id":"5",   
        "lat": "23.053",
            "long": "72.629",
            "location": "ABC",
            "address": "DEF",
            "city": "Ahmedabad",
            "state": "Gujrat",
            "phonenumber": "1234567"
        }
]

我希望将此字符串转换为每个json对象。我有一个地址类。我应该如何将这个json字符串转换为对象?
我尝试过:
Address address = gson.fromJson(addressJson, Address.class);

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2
    com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176)
    com.google.gson.Gson.fromJson(Gson.java:803)
    com.google.gson.Gson.fromJson(Gson.java:768)
    com.google.gson.Gson.fromJson(Gson.java:717)
    com.google.gson.Gson.fromJson(Gson.java:689)

可能是https://dev59.com/eWbWa4cB1Zd3GeqPTymR的重复问题。 - muthu
@muthu 不,那不是Gson。 - Brian
2个回答

23

试一下这个

Address[] address = gson.fromJson(addressJson, Address[].class);

4
此外,如果更喜欢使用像 List 这样的集合类型,可以将 fromJson 方法调用封装在 Arrays.asList 中。 - Brian
它正在工作,但是对于同一件事情,我有一个日期字段,其值为“Tue Aug 27 06:07:32 UTC 2013”。它显示错误:“java.text.ParseException:无法解析的日期:”Tue Aug 27 11:37:32 IST 2013“ java.text.DateFormat.parse(DateFormat.java:337)” - jackyesind
1
请查看此链接以了解详情:https://dev59.com/rWw15IYBdhLWcg3wCXOJ 您需要更改GSON的默认日期格式。 - Narendra Pathai
谢谢!这非常有用! - Alexander Gapanowich

1

通过使用 Jackson 库中的 ObjectMapper 类,你可以读取数值并将其映射到一个对象或对象数组。

final ObjectMapper objectMapper = new ObjectMapper();
Address [] mdls = objectMapper.readValue(addressJson, Address [].class);

对于 List<Address>,请使用以下内容:
List<Address> mdls = objectMapper.readValue(addressJson, new TypeReference<List<Address>>() {});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接