android gson 解析json字符串,Android – Retrofit Gson-如何在JSON响应中将JSON字符串解析为JSON键的对象?...

这是我的JSON响应:

{

"id": 2,

"name": "Test",

"content": "{\"type\": \"status\", \"text\": \"Lorem ipsum dummy text.\", \"id\": 1}"

}

这些是模型结构:

class TestModel {

public int id;

public String name;

public Content content;

}

class Content {

public int id;

public String status;

public String text;

}

我想使用Retrofit和GsonConvertor将内容的值直接解析到我的Content模型对象中.但是目前,我将其解析为String值,而不是使用Gson.fromJson()转换为我的Content模型对象.是否有任何解决方案可以获得我的预期结果?

当我以前使用GsonConverterFactory解析它时,Retrofit在onFailure方法中给出了回调,但有以下异常:

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 4 column 19 path $.data[0].content

解决方法:

问题在于JSON响应,它不在correct JSON format中.“content”字段应该是一个对象,而不是一个字符串:

{

"id": 2,

"name": "Test",

"content": {

"type": "status",

"text": "Lorem ipsum dummy text.",

"id": 1

}

}

这将允许gson.fromJson(response,TestModel.class)或带有GsonConverterFactory的RetroFit将您的响应正确解析为相应的对象.

当然,这仅适用于您能够更改正在接收的JSON响应的情况.如果没有,首先要确保控制响应的人知道他们做错了.如果没有任何变化,那么您应该能够通过将TestModel中的内容更改为String来解决此问题:

class TestModel {

public int id;

public String name;

public String content;

}

class Content {

public int id;

public String type;

public String text;

}

然后分别解析每个对象:

TestModel testModel = gson.fromJson(response, TestModel.class);

Content content = gson.fromJson(testModel.content, Content.class);

如果无法更改响应,则另一个选项是为Content对象创建TypeAdapter:

public class ContentAdapter extends TypeAdapter {

@Override

public void write(JsonWriter out, Content value) throws IOException {

// TODO: Writer implementation

}

@Override

public Content read(JsonReader in) throws IOException {

if(in.peek() != JsonToken.NULL) {

return fromJson(in.nextString());

} else {

in.nextNull();

return null;

}

}

}

然后将TypeAdapter添加到您的GSON实现:

Gson gson = new GsonBuilder()

.registerTypeAdapter(Content.class, new ContentAdapter()).create();

标签:json,android,gson,retrofit2

来源: https://codeday.me/bug/20190706/1394056.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值