On Wednesday, September 20, 2017 at 12:49:21 PM UTC+2, 
[email protected] wrote:
>
> Hi there
>
> I recently started using elemental.json. But I recently stumbled upon 
> strange (expected?) behaviour. Is there any good documentation? The javadoc 
> is quiet lacking, at least in this regard. So, what am I confused about?
>

My first and main advice would be: don't use Elemental.
If you need to parse JSON with a known structure, use JsInterop to describe 
that structure (as @JsType(isNative=true, namespace=JsPackage.GLOBAL, 
name="*"), or name="Object" if you can't use name="*"), and then either 
com.google.gwt.core.client.JsonUtils.<JavaScriptObject>safeEval() with a 
cast to your JsInterop interface/class, or JsInterop to call JSON.parse() 
(as @JsMethod(namespace="JSON", name="parse") static native <T> T 
parseJson(String json)).
If you don't know the structure upfront, then use jsinterop-base's types 
instead https://javadoc.io/doc/com.google.jsinterop/base/1.0.0-beta-2 
(JsPropertyMap mostly, and the Js helper class), and the same method for 
parsing. You might also want to have a look at 
elemental2-core: 
https://javadoc.io/doc/com.google.elemental2/elemental2-core/1.0.0-beta-1 
(which BTW defines JSONType.parse(…)), but be careful as Elemental2 is 
entirely generated, and might change in the future as the generator evolves 
(also, Elemental 2 might require that you use the HEAD-SNAPSHOT of GWT)

If you need something that can be used in a JVM too, you might be able to 
use GSON or Jackson to parse into similar structures (possibly define a 
JsPropertyMap implementation that wraps a LinkedHashMap).

 

> First, there is a "getNumber" (and it's equivalents), but those fail with 
> a classcastexception, if you use it on parsed Json. There is no problem if 
> you use it on values that were "put" there. Is that working as intended? 
> Second, and I guess this is a bug: If you use get(key).asBoolean() on a 
> recently parsed value, you get the correct value. But if you use it on a 
> value "false" you "put" in, you get true. 
>
> I would be happy if someone could shine some light on this for me :)
>

These are likely bugs, and they're unlikely to ever be fixed (unless maybe 
someone provides the patch).

I wrote a small "test" to demonstrate it:
>
> import com.google.gwt.core.shared.GWT;
>
> import elemental.json.JsonObject;
> import elemental.json.impl.JsonUtil;
>

The correct way is Json.instance(), one shouldn't ever use any "impl" class.

-- 
You received this message because you are subscribed to the Google Groups "GWT 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

Reply via email to