为了账号安全,请及时绑定邮箱和手机立即绑定

如何检测 json。语法错误,但存在错误。是

如何检测 json。语法错误,但存在错误。是

Go
慕妹3146593 2022-08-15 17:05:31
我无法检测到 json。语法检查从失败的解码器返回的错误时出错。解码操作!在这里,您可以看到操场上的工作示例。如您所见,调试器向我确认它是指向json的指针。语法错误,但错误。是 无法检测到它。我检查了错误。是实现:func Is(err, target error) bool {    if target == nil {        return err == target    }    isComparable := reflectlite.TypeOf(target).Comparable()    for {        if isComparable && err == target {            return true        }        if x, ok := err.(interface{ Is(error) bool }); ok && x.Is(target) {            return true        }        // TODO: consider supporting target.Is(err). This would allow        // user-definable predicates, but also may allow for coping with sloppy        // APIs, thereby making it easier to get away with them.        if err = Unwrap(err); err == nil {            return false        }    }}它们是可比较的(可比较的变量是真的),但是,当我期望它在这样做时返回true时,它会继续......if isComparable && err == target {我做错了什么?提前致谢。
查看完整描述

1 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

当前发生的情况是,您将新邮件的内存地址与 从 返回的错误进行比较。正如你所注意到的,这永远不会是真的。json.SyntaxErrorDecode


您要执行的操作略有不同:检查是否为类型,然后直接使用该对象。这可以使用类型断言,它基本上检查接口的基础类型(在本例中)是否为更具体的类型。errSyntaxErrorerror


这就是错误。事实也确实如此。它填充您指定的特定错误类型。使用此方法,可以到达以下代码:


if err != nil {

    var serr *json.SyntaxError

    

    if errors.As(err, &serr) {

        fmt.Println("Syntax error:", serr)

        fmt.Println("Offset:", serr.Offset)

    } else {

        fmt.Println("Other error:", err)

    }

}


查看完整回答
反对 回复 2022-08-15
  • 1 回答
  • 0 关注
  • 296 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号