在某些情况下,可能需要分部分或部分解编 JSON 数据。例如,数据的上半部分可能指示要在下半部分执行的操作,例如根据上半部分的“代码”解组到特定结构。
考虑以下示例结构:
<code class="go">type Range struct { Start int End int } type User struct { ID int Pass int }</code>
举个例子,JSON 数据可能类似于以下内容:
<code class="json">// Message with "Code" 4, signifying a Range structure { "Code": 4, "Payload": { "Start": 1, "End": 10 } } // Message with "Code" 3, signifying a User structure { "Code": 3, "Payload": { "ID": 1, "Pass": 1234 } }</code>
为了实现这种解组,我们可以延迟解析 JSON 数据的下半部分,直到我们确定上半部分的代码。请考虑以下方法:
<code class="go">import ( "encoding/json" "fmt" ) type Message struct { Code int Payload json.RawMessage // Delay parsing until we know the code } func MyUnmarshall(m []byte) { var message Message var payload interface{} json.Unmarshal(m, &message) // Delay parsing until we know the color space switch message.Code { case 3: payload = new(User) case 4: payload = new(Range) } json.Unmarshal(message.Payload, payload) // Error checks omitted for readability fmt.Printf("\n%v%+v", message.Code, payload) // Perform actions on the data } func main() { json := []byte(`{"Code": 4, "Payload": {"Start": 1, "End": 10}}`) MyUnmarshall(json) json = []byte(`{"Code": 3, "Payload": {"ID": 1, "Pass": 1234}}`) MyUnmarshall(json) }</code>
通过使用此方法,您可以根据指定的代码有效地按节解组任意 JSON 数据。
以上是如何根据代码解组任意节中的 JSON 数据?的详细内容。更多信息请关注PHP中文网其他相关文章!