Heim > Artikel > Backend-Entwicklung > Die JSON-Nummer wurde nach dem Unmarshaling für die Schnittstelle abgeschnitten
Während des Entwicklungsprozesses verwenden wir häufig das JSON-Format zur Datenübertragung. Manchmal stellen wir jedoch fest, dass nach dem Unmarshalling der JSON-Daten in die Schnittstelle die numerischen Daten abgeschnitten werden. Dies ist eine sehr häufige Frage, die jedoch leicht übersehen wird. In diesem Artikel stellt der PHP-Editor Zimo ausführlich die Ursachen dieses Problems vor und erläutert, wie man es vermeidet und löst, um die Integrität und Genauigkeit digitaler Daten sicherzustellen.
Ich habe also einen JSON mit vielen Feldern und durchlaufe ihn wie vorgeschlagen So ändern Sie JSON-Schlüssel effizient Entfernen Sie einige Schlüssel, die ich nicht benötige. Aber nach dem Löschen änderten sich die ursprünglichen Werte des vorhandenen JSON, einige davon schienen Floats zu sein, ich habe eine Demo erstellt, um es zu zeigen.
Wie kann man dieses Verhalten ändern? Ja interface{}
导致了该问题吗?为什么1684366653200744506
被截断为1684366653200744400
?
Danke!
https://go.dev/play/p/x2auwqwb2fl
Als Referenz: Der Ausgabe-JSON ändert sich in 1684366653200744400
2009/11/10 23:00:00 1684366653200744448.000000 2009/11/10 23:00:00 map[timestamp:1.6843666532007444e+18] 2009/11/10 23:00:00 json Marshal from maps of key string and value interface to batch json for insert to DB 2009/11/10 23:00:00 {"timestamp":1684366653200744400}
Das liegt daran, dass encoding/json
包将 float64
standardmäßig im Schnittstellenwert einer JSON-Nummer gespeichert ist. Siehe json.unmarshal:
Um JSON in einen Schnittstellenwert zu entmarshalieren, speichert unmarshal einen der folgenden Werte im Schnittstellenwert:
Sie können einen Decoder erstellen und (*decoder).usenumber aufrufen, um das Verhalten zu ändern:
jsonBatch := `{"timestamp":1684366653200744506, "todelete":"string value or boolean value"}` dec := json.NewDecoder(strings.NewReader(jsonBatch)) dec.UseNumber() var i interface{} if err := dec.Decode(&i); err != nil {
Siehehttps://www.php.cn/link/3a6c2c9231df58107434b942fa600b22.
Das obige ist der detaillierte Inhalt vonDie JSON-Nummer wurde nach dem Unmarshaling für die Schnittstelle abgeschnitten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!