Wie in der PHP-Dokumentation erwähnt, werden sie in floats umgewandelt, wenn eine Datenstruktur mit langen Ganzzahlen in eine json_decode
umgewandelt wird. Die Problemumgehung besteht darin, JSON_BIGINT_AS_STRING
zu verwenden, die sie stattdessen als Zeichenfolgen erhält. Wenn json_encode
solche Werte ing, JSON_NUMERIC_CHECK
wird diese Zahlen wieder in große ganzen Zahlen kodieren:json_decode AND json_encode lange ganze Zahlen ohne Daten zu verlieren
$json = '{"foo":283675428357628352}';
$obj = json_decode($json, false, JSON_BIGINT_AS_STRING);
$json2 = json_encode($obj, JSON_NUMERIC_CHECK);
var_dump($json === $json2); // true
diese Methode für einen korrekten Umlauf der Daten ist fehleranfällig. Wenn eine Eigenschaft '123'
enthält, eine numerische Zeichenfolge, die eine Zeichenfolge bleiben soll, wird sie in eine ganze Zahl codiert.
Ich möchte ein Objekt vom Server abrufen, eine Eigenschaft ändern und dann die gesamte Datenstruktur zurückgeben. Ich muss die ursprünglichen Typen bewahren. Ich möchte keine anderen Eigenschaften beibehalten als die, die ich manipuliere.
Gibt es eine echte Problemumgehung dafür? PHP hat keine Probleme mehr mit großen Ints, aber die json_decode
Routine scheint veraltet zu sein.
Haben Sie den ähnlichen Thread überprüft http://StackOverflow.com/Questions/15659325/JSON-Bigint-AS-String-backporting –
Es ist etwas verwirrend, was Sie fragen. Zusammenfassend: Sie wollen 'json_decode' einen Datensatz ändern, eine Eigenschaft ändern, dann' json_encode' es erneut; Ihr Problem besteht darin, dass große ganze Zahlen entweder in Floats oder Strings umgewandelt werden. Habe ich das richtig verstanden? – deceze
Ja, aber der Vorschlag ist, eine Drittanbieter-Lib zu verwenden. Ich mag es, meine Anwendungen klein zu halten. – SuperNova