package gjson import ( "encoding/json" "fmt" "strconv" ) // JSONString 字符串值类型 type JSONString struct { value string } // NewJSONString 创建新的JSONString实例 func NewJSONString(value string) *JSONString { return &JSONString{value: value} } // Value 返回实际的字符串值 func (js *JSONString) Value() interface{} { return js.value } // ToJSON 返回JSON格式的字符串表示 func (js *JSONString) ToJSON() (string, error) { bytes, err := json.Marshal(js.value) if err != nil { return "", err } return string(bytes), nil } // FromJSON 从JSON字符串初始化 func (js *JSONString) FromJSON(jsonStr string) error { var str string if err := json.Unmarshal([]byte(jsonStr), &str); err != nil { return err } js.value = str return nil } // ToString 返回字符串表示 func (js *JSONString) ToString() (string, error) { return js.value, nil } // FromString 从字符串初始化 func (js *JSONString) FromString(str string) error { js.value = str return nil } // JSONNumber 数字值类型 type JSONNumber struct { value float64 } // NewJSONNumber 创建新的JSONNumber实例 func NewJSONNumber(value float64) *JSONNumber { return &JSONNumber{value: value} } // Value 返回实际的数字值 func (jn *JSONNumber) Value() interface{} { return jn.value } // ToJSON 返回JSON格式的数字表示 func (jn *JSONNumber) ToJSON() (string, error) { return strconv.FormatFloat(jn.value, 'f', -1, 64), nil } // FromJSON 从JSON字符串初始化 func (jn *JSONNumber) FromJSON(jsonStr string) error { var num float64 if err := json.Unmarshal([]byte(jsonStr), &num); err != nil { return err } jn.value = num return nil } // ToString 返回字符串表示 func (jn *JSONNumber) ToString() (string, error) { return strconv.FormatFloat(jn.value, 'f', -1, 64), nil } // FromString 从字符串初始化 func (jn *JSONNumber) FromString(str string) error { num, err := strconv.ParseFloat(str, 64) if err != nil { return err } jn.value = num return nil } // JSONBool 布尔值类型 type JSONBool struct { value bool } // NewJSONBool 创建新的JSONBool实例 func NewJSONBool(value bool) *JSONBool { return &JSONBool{value: value} } // Value 返回实际的布尔值 func (jb *JSONBool) Value() interface{} { return jb.value } // ToJSON 返回JSON格式的布尔值表示 func (jb *JSONBool) ToJSON() (string, error) { return strconv.FormatBool(jb.value), nil } // FromJSON 从JSON字符串初始化 func (jb *JSONBool) FromJSON(jsonStr string) error { var b bool if err := json.Unmarshal([]byte(jsonStr), &b); err != nil { return err } jb.value = b return nil } // ToString 返回字符串表示 func (jb *JSONBool) ToString() (string, error) { return strconv.FormatBool(jb.value), nil } // FromString 从字符串初始化 func (jb *JSONBool) FromString(str string) error { b, err := strconv.ParseBool(str) if err != nil { return err } jb.value = b return nil } // JSONNull 空值类型 type JSONNull struct{} // NewJSONNull 创建新的JSONNull实例 func NewJSONNull() *JSONNull { return &JSONNull{} } // Value 返回null值 func (jn *JSONNull) Value() interface{} { return nil } // ToJSON 返回JSON格式的null表示 func (jn *JSONNull) ToJSON() (string, error) { return "null", nil } // FromJSON 从JSON字符串初始化 func (jn *JSONNull) FromJSON(jsonStr string) error { var val interface{} if err := json.Unmarshal([]byte(jsonStr), &val); err != nil { return err } if val != nil { return fmt.Errorf("expected null, got %v", val) } return nil } // ToString 返回字符串表示 func (jn *JSONNull) ToString() (string, error) { return "null", nil } // FromString 从字符串初始化 func (jn *JSONNull) FromString(str string) error { if str != "null" { return fmt.Errorf("expected 'null', got '%s'", str) } return nil }