我面临着从 json 对象中删除不需要的数组的问题,例如。仅包含一个元素的数组,该元素不是对象或数组。(没有数组作为输入的根)
在:
{"name": [{ "inner": ["test"] }]}
通缉:
{"name": [{ "inner": "test" }]}
我从对 a 的值进行简单的类型切换开始map[string]interface{}
,并认识到它不会切换到 case []map[string]interface{}
。(给出例子)
这是我想出的实现。它适用于大多数场景,但不适用于数组中的内部对象。
type jsonMap map[string]interface{}
type jsonMapList []map[string]interface{}
m := jsonMap{}
err := json.Unmarshal(s, &m)
if err != nil {
panic(err)
}
res := removeFromObject(m)
bytes, err := json.Marshal(res)
if err != nil {
panic(err)
}
result := string(bytes)
log.Infof("Parse Result: %s", result)
func removeFromObject(in jsonMap) jsonMap {
res := jsonMap{}
for k, v := range in {
switch value := v.(type) {
case jsonMap:
res[k] = removeFromObject(value)
case jsonMapList:
list := []jsonMap{}
for _, entry := range value {
list = append(list, removeFromObject(entry))
}
res[k] = list
case []interface{}:
if len(value) == 1 {
res[k] = value[0]
} else {
res[k] = value
}
default:
res[k] = value
}
}
return res
}
问题
如何将大小写切换为对象数组,以便我也可以递归解析该数组中的对象?
LEATH
相关分类