不正确的JSON被编组到结构而没有错误

agilob:

我有一种情况,当请求由于某种原因失败时,服务器将使用json错误对象进行响应,服务器始终以HTTP 200进行响应。因此,如果我的令牌过期并且我请求用户信息,例如:

type Person struct { FirstName string LastName string }

相反,{"FirstName": "Bob", "LastName": "Smith"}得到{"error":401, "msg":"Unauthorized"}

我有一个需要interface{}解组的功能

func (ah *APIHandler) getObjectFromJson(bodyResponse string, target interface{}) *ServerError {
    parsingError := json.NewDecoder(strings.NewReader(bodyResponse)).Decode(target)
    // when server responds with ServerError I expect to get persingError here and proceed to unmarshalling the error message
    if parsingError != nil {
        fmt.Println(parsingError.Error())
        var err *ServerError = &ServerError{}
        parsingError = json.NewDecoder(strings.NewReader(bodyResponse)).Decode(err)
        if parsingError != nil {
            // this means unmarshalling ServerError failed
            panic(parsingError.Error())
        }
        return err
    }
    return nil
}

放入一个工作示例中,当我提供不正确的JSON来传递时,interface{}我期望在控制台中收到“ JSON与结构不匹配”错误,而不是空结构。那可能吗?

我有50多个模型,因此理想情况下,我希望避免为每个模型编写解组器以检查字段是否已正确解组,而且我也想避免编写模型,if strings.Contains(responseBody, "error")因为某些对象中可能包含字符串错误。

https://play.golang.org/p/vecLomIXeB

彼得:

在解码时,标准库始终忽略未映射的字段。这就是您想要的,因为否则您将无法在不破坏这些模型的每个使用者的情况下向模型添加新字段。

而不是检查无法识别的字段,而是检查封送是否包含错误字段,方法是解封两次或通过除您期望的数据之外还分析错误字段。您已经做到了,但是反之亦然。

func (ah *APIHandler) getObjectFromJson(bodyResponse string, target interface{}) *ServerError {
    b := []byte(bodyResponse)

    se := &ServerError{}
    if err := json.Unmarshal(b, &se); err != nil {
            // ...
    }
    if se.Error != "" {
            return se
    }

    if err := json.Unmarshal(b, target); err != nil {
            // ...
    }

    return nil
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

不正确的宏定义没有错误

TypeScript:函数返回值不正确没有错误

Qt Creator:Android设置有错误。NDK目录结构不正确,并安装在带空格的路径中

我的结构没有编组到json中

C代码编译没有错误,但运行不正确(命令行参数和指针)

android上的saxParser有错误(格式不正确(无效令牌))

PHP JSON 结构不正确

在函数内部时,关键字“ if”附近的语法不正确,但不在函数中时则没有错误

从对象到JSON的转换不正确?

为什么leetcode说我的atoi答案不正确?这是不正确的吗?还是leetcode中有错误

hdparm错误:感觉数据不正确/丢失(没有hdparm命令起作用)

React Router 没有重定向到正确的页面,重定向到的页面为空。没有错误

AAPT:错误:格式不正确(无效的令牌)错误弹出窗口,但没有明显的拼写错误

不正确的 JSON 数据 - 数组到对象

数据帧行到 JSON 给出不正确的结果

为什么它没有播放所有的对话,而且从开始到结束的顺序也不正确?

方法上没有@ResponseBody的@RestController工作不正确

没有PK的表中的记录数据不正确

错误格式不正确

将结构引用从 C# 传递到 C 时,结构成员值不正确

JSON错误:由于格式不正确,无法读取数据

JSON解析错误字符不正确

Angular Post 错误内容类型不正确:application/json

Azure:New-AzRoleAssignment输入字符串的格式不正确-双重解析错误...没有任何数字

Django AWS Elastic Beanstalk错误配置不正确:加载MySQLdb模块时出错:没有名为MySQLdb的模块

结构Char分配不正确

Python结构给出不正确的长度

嵌套表结构不正确

正确的结构编组