Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android中使Moshi的JSON注释不区分大小写_Java_Android_Json_Moshi - Fatal编程技术网

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呢?那是从哪里来的?