Right there in the documentation, in the first paragraph:
Values may not be
null,NaNs, infinities, or of any type not listed here.
So yes, it is “…something that null values are not included…” (edit: that was a quote from your original question; your updated question changes it to “uninitialized values” but the default value of an object reference is null, so…)
It’s a “feature” of that class, though; JSON itself understands null just fine. Further down in the documentation it says you use a “sentinal value,” NULL, to represent null. Which seems…odd. There’s a note about it:
Warning: this class represents
nullin two incompatible ways: the standard Javanullreference, and the sentinel valueNULL. In particular, callingput(name, null)removes the named entry from the object butput(name, JSONObject.NULL)stores an entry whose value isJSONObject.NULL.
So:
params.put(KEY_TOKEN, token == null ? JSONObject.NULL : token);