【问题标题】:JSON Conversion Exception to java objectjava对象的JSON转换异常
【发布时间】:2017-03-24 03:37:08
【问题描述】:

我正面临 json 转换异常。当我将 json 转换为 java 对象时。

这是我的json

[  
   {  
      "PrefrenceId":"228f176d-d224-32d7-9bb5-6287a06a68e8",
      "UserId":"327e6c64-bc90-3ae8-8f7d-72837581ca13",
      "QuestionnaireId":"41f31b11-47f5-3e29-8c88-1a3615c978a7",
      "Suggestions":"",
      "Explanation":"",
      "IsActive":true,
      "IsDelete":false,
      "DateCreated":"2016-11-01 09:53:00.000",
      "DateUpdated":"2016-11-01 09:53:17.000"
   },
   {  
      "PrefrenceId":"52a74739-bdd3-33ac-a83f-72f60b1992b5",
      "UserId":"327e6c64-bc90-3ae8-8f7d-72837581ca13",
      "QuestionnaireId":"8cd5ac8e-89db-3d7b-bb2d-4e6735b245de",
      "Suggestions":"",
      "Explanation":"",
      "IsActive":true,
      "IsDelete":false,
      "DateCreated":"2016-11-01 09:48:53.000",
      "DateUpdated":"2016-11-01 09:53:15.000"
   },
   {  
      "PrefrenceId":"ae7fc877-b26a-34d3-a5f3-244c7e777e08",
      "UserId":"327e6c64-bc90-3ae8-8f7d-72837581ca13",
      "QuestionnaireId":"d3b98cde-111c-30d5-a4c9-412a76b656eb",
      "Suggestions":"Camping",
      "Explanation":"",
      "IsActive":true,
      "IsDelete":false,
      "DateCreated":"2016-11-01 09:53:02.000",
      "DateUpdated":"2016-11-01 09:53:19.000"
   },
   {  
      "PrefrenceId":"bcac0da7-31a6-345f-be82-ddff17c29b35",
      "UserId":"327e6c64-bc90-3ae8-8f7d-72837581ca13",
      "QuestionnaireId":"8fb1bda7-7ec8-3538-8aa8-ff84637764a4",
      "Suggestions":"",
      "Explanation":"",
      "IsActive":true,
      "IsDelete":false,
      "DateCreated":"2016-11-01 09:53:07.000",
      "DateUpdated":"2016-11-01 09:53:22.000"
   },
   {  
      "PrefrenceId":"ff46ce3c-70cb-3d25-8dbb-10e9c46d4c2d",
      "UserId":"327e6c64-bc90-3ae8-8f7d-72837581ca13",
      "QuestionnaireId":"3afffc17-30e4-311f-a0fc-8daa3bda6c98",
      "Suggestions":"",
      "Explanation":"",
      "IsActive":true,
      "IsDelete":false,
      "DateCreated":"2016-11-01 09:53:05.000",
      "DateUpdated":"2016-11-01 09:53:20.000"
   }
]

我的 POJO 课程:-

public class SurvivorZAMQuestionList implements Serializable {
    public List<SurvivorZAMQuestionnaire> survivorZAMQuestionnaires;
}


public class SurvivorZAMQuestionnaire implements Serializable {
    public String Suggestions;

    public String PrefrenceId;

    public String IsActive;

    public String IsDelete;

    public String DateCreated;

    public String DateUpdated;

    public String UserId;

    public String QuestionnaireId;

    public String Explanation;
}

但是当我将 json 响应转换为 json 时,它显示以下错误:- com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 预期 BEGIN_OBJECT 但在第 1 行第 2 列是 BEGIN_ARRAY

谁能告诉我我在 pojo 课上缺少什么。 任何形式的举行都应该受到赞赏。

【问题讨论】:

  • 从错误中,您需要更改 json 响应格式或更改获取 json 响应的方法。发布您的代码以获得更详细的解决方案
  • 静态 T getObject(String response, Class clazz) { try { Object t = clazz.newInstance();字段[] 字段 = clazz.getDeclaredFields(); Gson gson = 新 Gson(); return (T) gson.fromJson(response, clazz); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } 返回空值; @Divyesh 我使用上面的代码将响应转换为 json

标签: android


【解决方案1】:

您的响应是正确的,但您的解析不正确。所以首先在你的 gradle 文件中添加 GSON。

compile 'com.google.code.gson:gson:2.4'

现在使用下面的代码来解析您的响应

try {
        JSONArray array = new JSONArray("put your response here");
        Gson gson =  new Gson();
        for (int i = 0 ; i <array.length();i++)
        {
            SurvivorZAMQuestionnaire obj = new SurvivorZAMQuestionnaire();
            obj.add(gson.fromJson(array.getJSONObject(i).toString(),SurvivorZAMQuestionnaire.class));
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

在列表中添加您的 obj 并显示它:)

【讨论】:

    【解决方案2】:

    错误明确指出 Gson 接受 JsonObject 而不是 JsonArray。在您的情况下,您可以将响应 JsonArray 放入带有该 JsonArray 的密钥的 JsonObject 中,并在 SurvivorZAMQuestionList 中将该密钥作为 annotation。通过这种方式,您可以轻松地对这个问题进行排序。

    希望这有帮助:)

    【讨论】:

      【解决方案3】:

      你可以尝试使用 GSON 库 -> compile 'com.google.code.gson:gson:2.8.0'

      List<SurvivorZAMQuestionnaire> survivorZAMQuestionnaires;
      ...
      
      Gson gson = new Gson();
      Type listType = new TypeToken<List<SurvivorZAMQuestionnaire>>(){}.getType();
      survivorZAMQuestionnaires = gson.fromJson(jsonString, listType);
      

      Typejava.lang.reflect.Type; 的实例

      【讨论】:

        【解决方案4】:

        以这种方式解析您的 Json,

        List<SurvivorZAMQuestionnaire> survivorZAMQuestionnaires = new      Gson().fromJson(json, new TypeToken<List<SurvivorZAMQuestionnaire>>() {
            }.getType());
        

        【讨论】:

        • 如果您使用“SurvivorZAMQuestionList”类型进行解析,那么您需要将完整的 json 添加到具有键“survivorZAMQuestionnaires”的新 JsonObject 下。
        【解决方案5】:

        做一个gson的gradle依赖。

        compile 'com.google.code.gson:gson:2.4'   
        

        像这样更新代码;

         private void parseJSON(String jsonMessage) throws JSONException {
                    if (jsonMessage.startsWith("[")) {
                        Type type = new TypeToken<List<SurvivorZAMQuestionnaire>>() 
                        }.getType();
                        List<SurvivorZAMQuestionnaire> survivorZAMQuestionnaireList =new Gson().fromJson
                                (jsonMessage, type);
                        Log.d("Print List",survivorZAMQuestionnaireList.toString());
                    }
        
                }
        

        【讨论】:

        • 添加一些解释,说明此答案如何帮助 OP 解决当前问题
        【解决方案6】:

        您不仅需要对象列表,还需要对象列表,因为您的 JSON 包含对象列表。 How to Parse JSON Array in Android with Gson

        【讨论】:

          猜你喜欢
          • 2013-01-22
          • 2017-01-20
          • 1970-01-01
          • 2015-09-25
          • 2013-11-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多