Java can';t反序列化JSON

Java can';t反序列化JSON,java,json,deserialization,flexjson,Java,Json,Deserialization,Flexjson,尝试反序列化我认为是有效的JSON字符串时出错: String json = "{\"email\":\"testing@example.com\",\"password\":\"12345\"}"; // FlexJSON deserializer JSONDeserializer<Signin> deserializer = new JSONDeserializer<Signin>(); // Deserialize into a Signin POJO. Sig

尝试反序列化我认为是有效的JSON字符串时出错:

String json = "{\"email\":\"testing@example.com\",\"password\":\"12345\"}";

// FlexJSON deserializer
JSONDeserializer<Signin> deserializer = new JSONDeserializer<Signin>();

// Deserialize into a Signin POJO.
Signin signin = deserializer.deserialize(json);

我的JSON格式不正确吗?这几乎就好像JSON在某种程度上是“坏”的,FlexJSON将其视为HashMap…

您使用的这个库似乎真的不受支持。
自2010年以来似乎没有改变。我会尝试使用其他东西。

例如,我使用了这个,没有任何问题。

看看,问题是json没有声明它的类。这意味着您需要显式地向反序列化程序提供
对象,因为在Java中,泛型只在编译时,而不是运行时

引用文件:

我们需要替换在实例化反序列化程序时刚刚删除的类型信息。为此,我们将要使用的类传递到
flexjson.JSONDeserializer.deserialize(String,class)
方法,如下所示:

Hero hero = new JSONDeserializer<Hero>().deserialize( jsonHarvey, Hero.class ); 

你的json很好。这是您的代码:JSON编码的字符串没有固有的对象类型,因此在解码时它们将成为通用的hashmap。因此,正如错误所说,反序列化生成的hashmap不能转换为
Signin
对象。这不是一个纯粹的JSON问题。JSON是有效的,问题是FlexJSON如何将JSON对象转换为
Signin
的实例。谢谢@MarcB(+1)-那么我如何强制FlexJSON将字符串映射回
Signin
实例呢?@CalifornianAcorn看一下,它功能强大,支持所有类型的通用类型,可以正常工作,无需发布新版本,据介绍,上次更新(提交)是2013年8月hanks@peter.petrov(+1)-但我实际上从GSON切换到FlexJSON,因为我的大多数POJO都有通用的集合和列表属性,GSON在正确反序列化泛型类型方面非常糟糕。。。但如果所有其他方法都失败了,我将在这个用例中使用GSON。与此同时,我很想看看是否有人能让我开始使用FlexJSON。再次感谢@马克:没错。我不确定。这只是我根据经验的初步猜测。“我尽量不使用多年来没有人维护/更改的库。”加州橡子公司接着看到了马克·罗特维尔的答案。看来他明白了。
Hero hero = new JSONDeserializer<Hero>().deserialize( jsonHarvey, Hero.class ); 
Signin signin = deserializer.deserialize(json, Signin.class);