在某些情況下,可能需要分段或部分解編 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中文網其他相關文章!