@
ZeroDu #19
```go
package main
import (
"bytes"
"fmt"
jsoniter "
github.com/json-iterator/go"
)
func main() {
s := `
[
"com.test.UserInfo",
{
"userName": "13123",
"email": "a@qq.com",
"roleIds": [
"java.util.ArrayList",
[
"109","209","309"
]
]
}
]`
var (
cnf = jsoniter.ConfigCompatibleWithStandardLibrary
buf bytes.Buffer
out = jsoniter.NewStream(cnf, &buf, 512)
)
recursivelyRemoveTypes(out, jsoniter.ParseString(cnf, s).ReadAny())
err := out.Flush()
if err != nil {
panic(err)
}
fmt.Println(buf.String())
}
func recursivelyRemoveTypes(out *
jsoniter.Stream, data jsoniter.Any) {
switch data.ValueType() {
case jsoniter.ArrayValue:
if ds := data.Size(); ds > 0 {
if ds == 2 {
if data.Get(0).ToString() != "" {
recursivelyRemoveTypes(out, data.Get(1))
return
}
}
out.WriteArrayStart()
for i := 0; i < ds; i++ {
if i > 0 {
out.WriteMore()
}
recursivelyRemoveTypes(out, data.Get(i))
}
out.WriteArrayEnd()
} else {
out.WriteEmptyArray()
}
case jsoniter.ObjectValue:
if ks := data.Keys(); len(ks) > 0 {
out.WriteObjectStart()
for i, k := range ks {
if i > 0 {
out.WriteMore()
}
out.WriteObjectField(k)
recursivelyRemoveTypes(out, data.Get(k))
}
out.WriteObjectEnd()
} else {
out.WriteEmptyObject()
}
default:
data.WriteTo(out)
}
}
```
@
a132811 你这个递归提醒了我,可以用上面方法不用解析 json 和序列化 json ,性能应该不错。