package gjson import ( "encoding/json" ) // Stringify 将JSONBaseObject转换为格式化的JSON字符串 // 类似于JavaScript中的JSON.stringify函数 func Stringify(obj JSONBaseObject, space ...string) (string, error) { var indent string if len(space) > 0 { indent = space[0] } else { indent = "" // 默认无缩进 } // 根据不同的对象类型进行处理 switch v := obj.(type) { case *JSONObject: if indent != "" { // 格式化带缩进的JSON bytes, err := json.MarshalIndent(v.data, "", indent) if err != nil { return "", err } return string(bytes), nil } else { // 紧凑型JSON bytes, err := json.Marshal(v.data) if err != nil { return "", err } return string(bytes), nil } case *JSONArray: if indent != "" { // 格式化带缩进的JSON bytes, err := json.MarshalIndent(v.data, "", indent) if err != nil { return "", err } return string(bytes), nil } else { // 紧凑型JSON bytes, err := json.Marshal(v.data) if err != nil { return "", err } return string(bytes), nil } case *JSONString: return v.ToJSON() case *JSONNumber: return v.ToJSON() case *JSONBool: return v.ToJSON() case *JSONNull: return v.ToJSON() default: // 如果是其他类型,尝试转换为JSON bytes, err := json.Marshal(v) if err != nil { return "", err } return string(bytes), nil } } // StringifySimple 简单的字符串化函数,将任何值转换为JSON字符串 func StringifySimple(value interface{}, space ...string) (string, error) { var indent string if len(space) > 0 { indent = space[0] } else { indent = "" // 默认无缩进 } if indent != "" { bytes, err := json.MarshalIndent(value, "", indent) if err != nil { return "", err } return string(bytes), nil } else { bytes, err := json.Marshal(value) if err != nil { return "", err } return string(bytes), nil } } // PrettyPrint 格式化打印JSON对象 func PrettyPrint(obj JSONBaseObject) (string, error) { return Stringify(obj, " ") // 使用两个空格作为缩进 } // Compact 将JSON对象转换为紧凑格式(无多余空白字符) func Compact(obj JSONBaseObject) (string, error) { return Stringify(obj) // 无缩进的格式 }