在没有已知结构的情况下解组嵌套 JSON
当遇到没有定义结构的嵌套 JSON 数据时,有多种方法可以缓解解组中的挑战。
避免重复解组
通常建议尽量减少解组操作。考虑实现缓存机制来存储未编组的对象以供将来使用,并避免重复的编组。然而,在某些情况下,可能需要多次解组,尤其是在处理不同类型的嵌套结构时。
确定解组的正确结构
方法1:解组到map[string]interface{}
将json.RawMessage解组到map[string]interface{}。这允许检查嵌套结构以识别类型,并随后识别要解组到的正确结构。
示例:
<code class="go">var objMap map[string]interface{} json.Unmarshal(rawMessage, &objMap)</code>
方法 2 :正则表达式匹配
使用正则表达式来匹配JSON数据中的类型字符串。一旦知道类型,请使用反射或类型开关将其解组到相应的结构中。
示例:
<code class="go">type Regex *regexp.Regexp // Split the JSON data into key-value pairs type KeyValue struct { Key string Value string } // Regex for extracting the type var typeRE = Regex(regexp.MustCompile(`(?m)^.*"type": "(.+)".*$`)) // Unmarshal the raw message and extract the type func getType(rawMessage []byte) (string, error) { var data KeyValue err := json.Unmarshal(rawMessage, &data) if err != nil { return "", err } matches := typeRE.FindStringSubmatch(data.Value) return matches[1], nil }</code>
使用复制或常规表达式方法
方法 A:复制和解组
方法 B:正则表达式和解组
以上是在不知道其结构的情况下如何解组嵌套的 JSON 数据?的详细内容。更多信息请关注PHP中文网其他相关文章!