Java 我看到了字符串;urlToImage“;在json中回答,但我的gsonfactory没有解析它!为什么? 解决了的
我正在使用改型进行异步调用,当我收到JSON响应时,查看网络日志我看到它包含“urlToImage”带有一些url的字符串,但当我的gsonfactory将其解析为JSON模型时,“urlToImage”总是null 我收到一个带有JSON响应的POJO对象,并将其用作JSON模型,但还没有成功 我试图从该响应中解析另一个字符串以进行测试,除了字符串“publishedAt”和“urlToImage”之外,每个字符串都是平滑的。它们总是空的Java 我看到了字符串;urlToImage“;在json中回答,但我的gsonfactory没有解析它!为什么? 解决了的,java,android,json,gson,Java,Android,Json,Gson,我正在使用改型进行异步调用,当我收到JSON响应时,查看网络日志我看到它包含“urlToImage”带有一些url的字符串,但当我的gsonfactory将其解析为JSON模型时,“urlToImage”总是null 我收到一个带有JSON响应的POJO对象,并将其用作JSON模型,但还没有成功 我试图从该响应中解析另一个字符串以进行测试,除了字符串“publishedAt”和“urlToImage”之外,每个字符串都是平滑的。它们总是空的 在JSON中,回答“urlToImage”不为空:
在JSON中,回答“urlToImage”不为空:
我的JSON模型:
public class Article {
private Source source;
private String title;
private String description;
private String urlToImage;
----< constructor, getters and setters >----
private class Source {
private String name;
----< constructor, getters and setters >----
}
}
我的GSON工厂:
更新1 正如@mcu皇帝所注意到的,在我的gsonbuilder中设置了
FieldNamingPolicy
。全部:
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_,带下划线)代码>
因此:
- 我试图将urlToImage重命名为url_to_image-没有效果,仍然为空
- 我试图设置
FieldNamingPolicy.IDENITY
docs:“使用
此Gson命名策略将确保字段名为
未更改。“-无效,仍然无效
- 我删除了FieldNamingPolicy-无效
- 我删除了GSON builder,现在我只是通过了GSON工厂
.addConverterFactory(GsonConverterFactory.create())
正在创建改装对象-无效果,仍然为空
此外,我在改造的github问题上发现了这一点,2015年9月,开发者将这种行为称为“bug”。我不知道是我还是什么
更新2
在我的依赖项中,我只有'com.squareup.2:converter gson:2.5.0'
,但当我添加'com.google.code.gson:gson:2.8.5'
时,urlToImage的值与null不同!哇 这是因为您明确告诉Gson这样做
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
希望您的字段urlToImage
映射到json键url\u to\u image
您可以看到JSON示例的属性已经用camelCase编写。这些字段等于您在模型中定义的字段。如果删除字段命名策略,它将正常工作。我们可以看到调用Gson库的代码吗?这可能是因为字段名包含大写字符。@mcepender添加到了endYes!因为每个字段都是一个单词,所以没有下划线。昨天晚上我注意到了gson政策,不知怎么的,它没有成功地建立起来,但现在我看到了。非常感谢)同样的事情也发生在了PublishDAT上,这就是我注意到的原因:-)
@Provides
@Singleton
Gson provideGson() {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
return gsonBuilder.create();
}
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);