a132811
28 天前
递归移除一下就可以了:
```
package main
import (
"encoding/json"
"fmt"
)
func removeJavaTypes(input string) (string, error) {
var data interface{}
if err := json.Unmarshal([]byte(input), &data); err != nil {
return "", fmt.Errorf("failed to unmarshal json: %w", err)
}
cleanedData, err := recursivelyRemoveTypes(data)
if err != nil {
return "", err
}
outputBytes, err := json.Marshal(cleanedData)
if err != nil {
return "", fmt.Errorf("failed to marshal json: %w", err)
}
return string(outputBytes), nil
}
func recursivelyRemoveTypes(data interface{}) (interface{}, error) {
switch v := data.(type) {
case []interface{}:
if len(v) == 2 {
_, isString := v[0].(string)
if isString {
return recursivelyRemoveTypes(v[1])
}
}
for i := range v {
var err error
v[i], err = recursivelyRemoveTypes(v[i])
if err != nil {
return nil, err
}
}
return v, nil
case map[string]interface{}:
for key := range v {
var err error
v[key], err = recursivelyRemoveTypes(v[key])
if err != nil {
return nil, err
}
}
return v, nil
default:
return data, nil
}
}
func main() {
input := `
[
"com.test.UserInfo",
{
"userName": "13123",
"email": "a@a.com",
"roleIds": [
"java.util.ArrayList",
[
"109"
]
]
}
]
`
output, err := removeJavaTypes(input)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Output:", output)
}
}
```