【问题标题】:convert json String to array java object by Gson通过 Gson 将 json 字符串转换为数组 java 对象
【发布时间】:2018-01-20 22:54:49
【问题描述】:

我一直不明白如何使用 gson。 这是从我的网络服务获取的 json 字符串:

{
"GetHistoricalNotificationsInTopicByFilterResult":[
  {
     "BusinessCode":"10-1-75-16-1-3-0",
     "CreationDateTime":"\/Date(1502550561602)\/",
     "DeviceId":"8998432005",
     "Distributions":null,
     "EventData":[ ],
     "EventId":"com.test.revisit.events",
     "EventTitle":"sending",
     "Id":"69dbc367-09ws-bf3c-9re8-5c6b35ecbrtg",
     "ProcessId":"4ebb6271-bf3c-9re8-a148-5c6b35ec458",
     "SystemId":"com.safarayaneh.revisit",
     "SystemTitle":"seeing",
     "UserFullName":"jack",
     "UserId":"69dbc367-32f3-4e94-bf3c-5c6b35ec3456",
     "WKT":"POLYGON ((59.0 36.0, 59.01 36.01, ...))",
     "WorkItemId":2354365
 },{
 ....
}

这是我的合同类:

public class SaveNotify implements Parcelable {

private long id;
private String NotificationID;
private String MessageID;
private String CreationDateTime;
private String DeviceId;
private String UserId;
private String UserFullName;
private String SystemId;
private String SystemTitle;
private String EventId;
private String EventTitle;
private String EventData;
private String BusinessCode;
private String ProcessId;
private String WorkItemId;
private String WKT;
private String Distributions;
private String Address;
private String SaveDate;
private String Status;
private String DistributionId;
private String SchedulerCreationDateTime;
private String ExpirationDateTime;

如何将我从 web 服务接收到的 json 字符串转换为 pojo 类作为数组列表?我想将此列表放入我的回收器视图适配器中,以便将此信息显示为列表。

【问题讨论】:

    标签: json arraylist gson


    【解决方案1】:

    您需要创建一个对象,该对象获取字段GetHistoricalNotificationsInTopicByFilterResult

    public class MainObject implements Parceable{
    
        List<SaveNotify > GetHistoricalNotificationsInTopicByFilterResult;
    
    }
    

    然后,使用 Gson 将 JSON 分配给 MainObject

    Gson gson = new Gson();
    MainObject mainObject = gson.fromJson(jsonString, MainObject.class);
    

    【讨论】:

    • 我将您的建议添加到我的 pojo 课程中,然后添加此评论:Gson gson = new Gson(); Type type = new TypeToken&lt;List&lt;List&lt;SaveNotify&gt;&gt;&gt;() {}.getType(); List&lt;SaveNotify&gt; yourList = gson.fromJson(response, type); 但我收到此错误com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
    • List yourList = gson.fromJson(response, type);这是错误的。这不是我让你做的事
    • 你需要完全按照我在回答中写的那样做。
    • MainObject mainObject 是一个列表,但您的评论不是!我是从 AsyncTask 收到的。 codepad.org/VJ0nrZqf
    • 你的 JSON 总体上是一个对象,这就是为什么你需要一个对象,之后你需要检查接下来会发生什么,即 GetHistoricalNotificationsInTopicByFilterResult,它是一个列表,所以你在那个对象里面放了一个列表。由于它是一个列表,因此列表的每个元素都需要一个对象,这就是您的 SaveNotify。在 `gsonFromJson 你得到一个 MainObject,而不是 List
    猜你喜欢
    • 2017-08-11
    • 2021-10-04
    • 2013-05-19
    • 1970-01-01
    • 2023-03-08
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多