【问题标题】:Checking json before casting to custom object在转换为自定义对象之前检查 json
【发布时间】:2019-10-15 01:14:53
【问题描述】:

我正在使用 json 字符串来存储和检索对象/类值。我想检查以确保给定的 json 字符串与提供的对象匹配。如果可能的话,我想这样做而不必使用 try..catch 块。这就是我现在的样子。 try...catch 有效,但我在某处读到建议尽可能多地摆脱 try...catch。

假设我们有一个类如下

public class Person
    public String Name;
    public int Age;
end class

然后我们得到下面的json字符串

{
"phonenumber":"777 777 7777"
"gender":"F"
}

显然 json 字符串不能转换为给定的类。 try...catch 是检查是否可铸造的唯一方法还是有其他方法? (幸运的是,这是非常明显的)。

【问题讨论】:

  • 我认为使用 try-catch 块没有风险。实际上,如果使用 @JsonIgnoreProperties(ignoreUnknown = true),您可以将 json 字符串解析为 Person 对象。当json字符串与对象属性不匹配时,Person等对象为null。

标签: android json object


【解决方案1】:

这样的情况就是存在 try-catch/异常处理结构的原因,所以我建议不必担心。有很多原因可能会导致您收到无法解析的格式错误的 JSON(例如,后端 API 可能已更改,某些网络问题会切断流等...)并且您的客户端代码无法处理所有这些都是单独的。异常概括了这些情况,并允许您优雅地应对这些情况。

Java 确实有一个臭名昭著的名声,即所有内容都加载了繁琐的样板文件,因此优秀的 SDK 或库作者会找到一种方法来抽象多个“低级异常”和更少的“高级”异常,以便该代码的用户不必自己处理所有这些

例如,您正在解析一个 JSON 对象,假设您是从网络 API 调用中获得的。正因为如此,您的网络代码可能需要处理 IOException、URLException 等......所以您可能会做的是将所有代码隐藏在某种“APIService”类中,该类在内部处理所有这些异常,但只会冒泡将单个“APIException”发送给调用代码的任何人,并将 APIException 中发生的任何问题的详细信息传递给。

作为“APIService”的作者,您仍然需要处理所有这些不同的异常,但使用您的代码的人只需处理“APIException”。这不仅隐藏了实现细节(一件好事),而且使用您的代码的人将不得不编写更少的样板(也是一件好事)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 2023-03-11
    • 2011-01-15
    • 2015-10-09
    相关资源
    最近更新 更多