問題
- Liferay API (JSONObjectImpl.java) を使用して新しい JSON オブジェクトを生成し、それに新しい long 値を追加すると、返される値は二重引用符で囲まれた文字列になります。
この場合、ユーザーは を呼び出しています
これはここに実装されています: https://github.com/liferay/liferay-portal/blob/5f33f077a3f08ca5c2e9872d6f9d42c234e47a37/portal-impl/src/com/liferay/portal/json/JSONObjectImpl.java#L302-L312
Environment
- ライフレイ DXP 7.0.0+
解決策
- これは予期される動作です。
チケットで動作の変更が発生します https://issues.liferay.com/browse/LPS-59156. そのメソッドに 9,007,199,254,740,992 より大きい値を送信することに関連する問題を解決します。 これらのケースでは、精度が失われました (詳細については https://issues.liferay.com/browse/LPS-58586 を参照して)。これは、長い値が JavaScript でサポートされている数値よりも大きくなる可能性があり、結果として数値の精度が失われるために発生します。
たとえば、答えが 9,007,199,254,740,993 の場合、ブラウザは 9,007,199,254,740,992 を読み取ることができます。
追加情報