Java 如何在Android中使Moshi的JSON注释不区分大小写
有时我的后端返回电子邮件,有时它返回电子邮件。我希望第一个字符不区分大小写。这可能吗Java 如何在Android中使Moshi的JSON注释不区分大小写,java,android,json,moshi,Java,Android,Json,Moshi,有时我的后端返回电子邮件,有时它返回电子邮件。我希望第一个字符不区分大小写。这可能吗 public class GetConversationListResponseBody { @Keep @Json(name = "email") private String email; } 没有内置的通用方法来实现这一点 如果您在单个情况下需要它,那么定制适配器就很简单了 public static final class GetConversationListResp
public class GetConversationListResponseBody {
@Keep
@Json(name = "email")
private String email;
}
没有内置的通用方法来实现这一点 如果您在单个情况下需要它,那么定制适配器就很简单了
public static final class GetConversationListResponseBody {
public final String email;
GetConversationListResponseBody(String email) {
this.email = email;
}
}
static final class InternalGetConversationListResponseBody {
String email;
String EMAIL;
static final Object ADAPTER = new Object() {
@FromJson GetConversationListResponseBody fromJson(
InternalGetConversationListResponseBody json) {
String email = json.email != null ? json.email : json.EMAIL;
return new GetConversationListResponseBody(email);
}
};
}
@Test public void getConversationListResponseBody() throws IOException {
Moshi moshi = new Moshi.Builder()
.add(InternalGetConversationListResponseBody.ADAPTER)
.build();
JsonAdapter<GetConversationListResponseBody> adapter = moshi.adapter(GetConversationListResponseBody.class);
assertThat(adapter.fromJson("{\"email\":\"e@gmail.com\"}").email).isEqualTo("e@gmail.com");
assertThat(adapter.fromJson("{\"EMAIL\":\"e@gmail.com\"}").email).isEqualTo("e@gmail.com");
}
公共静态最终类GetConversationListResponseBody{
公开最终字符串电子邮件;
GetConversationListResponseBy(字符串电子邮件){
this.email=电子邮件;
}
}
静态最终类InternalGetConversationListResponseBody{
字符串电子邮件;
字符串电子邮件;
静态最终对象适配器=新对象(){
@FromJson GetConversationListResponseBy FromJson(
InternalGetConversationListResponseBody(json){
字符串email=json.email!=null?json.email:json.email;
返回新的GetConversationListResponseBody(电子邮件);
}
};
}
@测试公共void getConversationListResponseBody()引发IOException{
Moshi-Moshi=new Moshi.Builder()
.add(InternalGetConversationListResponseBy.ADAPTER)
.build();
JsonAdapter adapter=moshi.adapter(GetConversationListResponseBody.class);
assertThat(adapter.fromJson(“{\”email\”:\”e@gmail.com\“}”)。电子邮件)。isEqualTo(”e@gmail.com");
assertThat(adapter.fromJson(“{\”EMAIL\”:\”e@gmail.com\“}”)。电子邮件)。isEqualTo(”e@gmail.com");
}
以下是关于这一点的答案:
JSON键区分大小写。email和email是两个不同的属性,应该这样对待,因为如果两者都存在于一个JSON blob中,就无法进行协调。如果Moshi不区分大小写,这将是一个bug,因此它肯定不是我们要添加的“功能”
那么如何解析json.email呢?那是从哪里来的?