Dans certains scénarios, il peut être nécessaire de dissocier les données JSON en parties ou sections. Par exemple, la moitié supérieure des données peut indiquer l'action à effectuer sur la moitié inférieure, comme la désorganisation dans une structure spécifique basée sur le « code » dans la moitié supérieure.
Considérez les exemples de structures suivants :
<code class="go">type Range struct { Start int End int } type User struct { ID int Pass int }</code>
À titre d'exemple, les données JSON pourraient ressembler à ce qui suit :
<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>
Pour réaliser cette désorganisation, nous pouvons retarder l'analyse de la moitié inférieure des données JSON jusqu'à ce que nous ayons déterminé le code dans la moitié supérieure. Considérez l'approche suivante :
<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>
En utilisant cette approche, vous pouvez efficacement désorganiser les données JSON arbitraires en sections, en fonction du code spécifié.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!