36 lines
763 B
Go
36 lines
763 B
Go
// Package jsonvalue 提供不依赖业务模块的 JSON 基础值类型。
|
|
package jsonvalue
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strings"
|
|
)
|
|
|
|
// FlexibleString 兼容 JSON 字符串、数字和 null,并统一以字符串保存。
|
|
type FlexibleString string
|
|
|
|
func (f *FlexibleString) UnmarshalJSON(raw []byte) error {
|
|
if string(raw) == "null" {
|
|
*f = ""
|
|
return nil
|
|
}
|
|
if len(raw) > 0 && raw[0] == '"' {
|
|
var value string
|
|
if err := json.Unmarshal(raw, &value); err != nil {
|
|
return err
|
|
}
|
|
*f = FlexibleString(value)
|
|
return nil
|
|
}
|
|
var value json.Number
|
|
if err := json.Unmarshal(raw, &value); err != nil {
|
|
return err
|
|
}
|
|
*f = FlexibleString(value.String())
|
|
return nil
|
|
}
|
|
|
|
func (f FlexibleString) String() string {
|
|
return strings.TrimSpace(string(f))
|
|
}
|