json - GSON 抛出“预期为 BEGIN_OBJECT,但为 STRING

标签 json gson

这是 Json 对象

[
   {
   "UserId":"demouser1",

   "Catagories":[
       {
       "CatagoryName":"Entertainment",
       "Persent":"25"
       },
       {
       "CatagoryName":"Household",
       "Persent":"25"
       },
       {
       "CatagoryName":"Movie",
       "Persent":"25"
       },
       {
       "CatagoryName":"Misc",
       "Persent":"25"
       }
   ],

   "RequestId":null,

   "ResponseStatus":false,

   "Token":null
   }

]

使用以下方法解析上述 Json

public class CategoryEntity {

    private String CatagoryName;
    private String Persent;
    public String getCatagoryName() {
        return CatagoryName;
    }
    public void setCatagoryName(String catagoryName) {
        CatagoryName = catagoryName;
    }
    public String getPersent() {
        return Persent;
    }
    public void setPersent(String persent) {
        Persent = persent;
    }
}



import java.util.List;

public class Entity  {

    private String UserId;

    public String getUserId() {
        return UserId;
    }

    public void setUserId(String userId) {
        UserId = userId;
    }

    public List<CategoryEntity> getListCatagories() {
        return ListCatagories;
    }

    public void setListCatagories(List<CategoryEntity> listPMMCatagories) {
        ListCatagories = listPMMCatagories;
    }

    public String getRequestId() {
        return RequestId;
    }

    public void setRequestId(String requestId) {
        RequestId = requestId;
    }

    public boolean isResponseStatus() {
        return ResponseStatus;
    }

    public void setResponseStatus(boolean responseStatus) {
        ResponseStatus = responseStatus;
    }

    private List<CategoryEntity> ListCatagories;

    private String RequestId;

    private String Token;

    public String getToken() {
        return Token;
    }

    public void setToken(String token) {
        Token = token;
    }

    private boolean ResponseStatus; 

}

还有 下面的方法将json对象转换为对应的对象

Gson gson =new Gson();

JsonPrimitive listCatagoriesElement= element.getAsJsonPrimitive();

                    System.out.println("listCatagoriesElement.getAsString()>>"+listCatagoriesElement.getAsString());

sysout prints:  listCatagoriesElement.getAsString()>>[{"UserId":"user1","ListCatagories":[{"CatagoryName":"Entertainment","Persent":"25"},{"CatagoryName":"Household","Persent":"25"},{"CatagoryName":"Movie","Persent":"25"},{"CatagoryName":"Misc","Persent":"25"}],"RequestId":null,"ResponseStatus":false,"Token":null}]

Entity entity = gson.fromJson(listCatagoriesElement, Entity.class);

有什么想法我应该如何解决它吗?

谢谢!

最佳答案

您的类CategoryEntity是正确的,但在您的类Entity中,属性ListCatagories应称为Catagories匹配 JSON 中的名称!

除此之外,为了解析 JSON,你最好这样做:

Gson gson = new Gson();
Type listType = new TypeToken<List<Entity>>() {}.getType();
List<Entity> entities = gson.fromJson(yourJsonString, listType);

因此,您将拥有一个仅包含一个 Entity 对象的 List,并且您可以通过以下方式访问这些值:

String catagoryNameI = entities.get(0).getCatagories().get(i).getCatagoryName();
String persentI = entities.get(0).getCatagories().get(i).getPersent();

您必须这样做,因为您的整个 JSON 响应是一个数组,由 [ ... ] 包围,因此您需要将其解析为一些 List.. .

关于json - GSON 抛出“预期为 BEGIN_OBJECT,但为 STRING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17924788/

相关文章:

javascript - 如何在 Accordion react 原生中渲染复杂对象

java - 获取 MessageBodyProviderNotFoundException : MessageBodyReader not found for media type=text/plain When output is JSON string

Java with GSON - 仅将值反序列化为 JSON 字符串的 ArrayList

android - 错误 : package com. google.gson.annotations 不存在

java - GSON:无知地将 JSON 转换为对象

java - Gson:反序列化元素类型不同的数组

javascript - JSON:已收到响应但无法在 jQuery 中显示它

javascript - D3 强制定向 JSON 邻接表

javascript - Angularjs oauth 弹出窗口,等待 JSON 响应

java - 在java中将嵌套Json文件转换为CSV