我知道这已被问过几次了,但是我没有看到符合我需要支持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]"。如何才能使用数据而不使用?
答案 0 :(得分:2)
如何才能使用数据而不使用?
不幸的是,您无法使用标准库json
包。它在解码之前验证JSON输入,并且空字符串不是有效的JSON,因此在您有机会使用自定义解组器解码之前它会出错。
在这种特殊情况下,唯一真正的选择是首先检查有效输入。当然,如果需要,可以使用包装功能执行此操作:
func myUnmarshal(input []byte, target interface{}) error {
if len(input) == 0 {
return nil
}
return json.Unmarshal(input, target)
}