Désorganisation arbitraire des données
Dans de nombreux scénarios, il est nécessaire de désorganiser les données JSON de manière flexible, permettant au processus de désorganisation de s'adapter à différents des structures de données basées sur une valeur de code prédéterminée. Cela permet une interprétation dynamique des données reçues de diverses sources.
Par exemple, considérons un message JSON qui contient un champ « code », qui spécifie le type de données contenues dans le champ « charge utile ». Le champ « payload » pourrait représenter une structure de données différente selon la valeur du « code ».
Pour y parvenir, on peut utiliser la technique suivante :
<code class="go">package main import ( "encoding/json" "fmt" ) type Message struct { Code int Payload json.RawMessage // delay parsing until we know the code } // Define the possible data structures that can be unmarshalled from the "payload" field type Range struct { Start int End int } type User struct { ID int Pass int } // Custom unmarshalling function func MyUnmarshall(m []byte) { var message Message var payload interface{} json.Unmarshal(m, &message) // delay parsing until we know the color space // Determine the data structure based on the "code" field switch message.Code { case 3: payload = new(User) case 4: payload = new(Range) } // Unmarshall the "payload" field into the appropriate data structure json.Unmarshal(message.Payload, payload) //err check ommited for readability // Do something with the unmarshalled data fmt.Printf("\n%v%+v", message.Code, payload) } 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>
Dans cet exemple, le La fonction MyUnmarshall reçoit un message JSON, stocke les champs « code » et « payload » dans une structure Message, puis crée dynamiquement une instance de structure de données basée sur la valeur « code ». Il désorganise ensuite le champ « charge utile » dans la structure appropriée et exécute les actions souhaitées sur les données non organisées.
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!