在 JSON 解组中扩展布尔解析选项
当映射服务输出模糊布尔类型和其他值之间的界限时,更包容的 JSON解析器变得至关重要。内置的encoding/json unmarshal 函数在这方面存在不足,促使人们寻找允许的解析替代方案。
一种方法是为所需类型创建自定义 UnmarshalJSON 函数。该函数可以定义自定义解析规则来处理不明确的布尔值。例如,考虑以下 ConvertibleBoolean 类型:
type ConvertibleBoolean bool func (bit *ConvertibleBoolean) UnmarshalJSON(data []byte) error { asString := string(data) if asString == "1" || asString == "true" { *bit = true } else if asString == "0" || asString == "false" { *bit = false } else { return errors.New(fmt.Sprintf("Boolean unmarshal error: invalid input %s", asString)) } return nil }
在此函数中,字符串“1”和“true”被映射为 true,而“0”和“false”被解析为 false。超出这些范围的值会触发错误。
要利用此自定义布尔解析,请将 json 标签应用于目标字段。例如:
type MyType struct { AsBoolean ConvertibleBoolean `json:"field1"` AlsoBoolean ConvertibleBoolean `json:"field2"` }
使用这些自定义解析规则,JSON 输入:
{ "field1": true, "field2": 1 }
将生成以下未编组的结构:
obj := MyType{} json_err := json.Unmarshal([]byte(input_json), &obj) fmt.Printf("%v\n", obj.AsBoolean) //"true" fmt.Printf("%v\n", obj.AlsoBoolean) //"true"
通过利用自定义解析函数,您可以灵活地进行 JSON 解组,从而可以将不明确的布尔值处理为需要。
以上是如何自定义 JSON 解组来处理不明确的布尔值?的详细内容。更多信息请关注PHP中文网其他相关文章!