Jak wspomniano w dokumentacji PHP, gdy json_decode
ing struktury danych zawierających długie liczby całkowite, zostaną one przekonwertowane na zmienne. Rozwiązaniem jest użycie JSON_BIGINT_AS_STRING
, która zachowuje je jako ciągi. Kiedy json_encode
ing takie wartości, JSON_NUMERIC_CHECK
zakoduje te numery z powrotem do dużych liczb całkowitych:json_decode I json_encode długie liczby całkowite bez utraty danych
$json = '{"foo":283675428357628352}';
$obj = json_decode($json, false, JSON_BIGINT_AS_STRING);
$json2 = json_encode($obj, JSON_NUMERIC_CHECK);
var_dump($json === $json2); // true
Stosując tę metodę do prawidłowego obie strony danych jest podatna na błędy. Jeśli właściwość zawiera '123'
, łańcuch liczbowy, który powinien pozostać ciągiem znaków, zostanie zakodowany na liczbę całkowitą.
Chcę pobrać obiekt z serwera, zmodyfikować jedną właściwość i przywrócić całą strukturę danych. Muszę zachować oryginalne typy. Nie chcę utrzymywać właściwości innych niż te, którymi manipuluję.
Czy istnieje rzeczywiste obejście tego problemu? PHP nie ma już żadnych problemów z dużymi intami, ale rutyna json_decode
wydaje się być przestarzała.
Sprawdziłeś podobny wątek http://stackoverflow.com/questions/15659325/json-bigint-as-string-backporting –
To trochę zagmatwało to, o co prosisz. Podsumowując: chcesz "json_decode" zestaw danych, zmienić niektóre właściwości, a następnie "json_encode" to jeszcze raz; Twoim problemem jest to, że duże liczby całkowite zamieniają się w pływaki lub łańcuchy. Czy mam to prawidłowe? – deceze
Tak, ale sugeruje się użycie biblioteki innej firmy. Lubię utrzymywać małe aplikacje. – SuperNova