Go" JSON输入的意外结束"错误

时间:2018-02-05 23:10:11

标签: go

我知道这已被问过几次了,但是我没有看到符合我需要支持NULL值的一个。我有一个在DB中可选的字段。我需要以JSON格式输出包含这些可能的NULL字段的数据,如果它们仍为NULL,我想从JSON中省略它们。我可以更改为除NULL之外的其他一些默认值,但我还没有找到一个有效的默认值。我在MariaDB中以JSON格式(longtext)存储JSON数组。这是我的代码失败(游乐场link):

package main

import (
    "encoding/json"
    "fmt"
)

var respBytes = []byte("")
// Example data [12345, 23456, 34567]

func main() {
    var jsonData []interface{}
    err := json.Unmarshal(respBytes, &jsonData)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(jsonData)
}

respBytes空字符串替换为示例数据,它可以正常工作。示例数据是简单的JSON数字数组,例如:" [12345,23456,34567]"。如何才能使用数据而不使用?

1 个答案:

答案 0 :(得分:2)

  

如何才能使用数据而不使用?

不幸的是,您无法使用标准库json包。它在解码之前验证JSON输入,并且空字符串不是有效的JSON,因此在您有机会使用自定义解组器解码之前它会出错。

在这种特殊情况下,唯一真正的选择是首先检查有效输入。当然,如果需要,可以使用包装功能执行此操作:

func myUnmarshal(input []byte, target interface{}) error {
    if len(input) == 0 {
        return nil
    }
    return json.Unmarshal(input, target)
}