我正在使用" org.json"对于JSON。我可以使用JSONObject将任何类序列化为JSON字符串。但是,我不确定如何走另一条路。如何将JSON字符串反序列化为类实例?
此代码用于序列化它。我使用JSONObject,并提供了一个字段名列表作为构造函数的第二个参数 - User.JSONFieldMap()。
int randomValue = rnd.nextInt(10000);
String userName = "JavaUnitTest_" + randomValue;
User newUser = new User();
newUser.UserName = userName;
newUser.DisplayName = "Java Unit Test";
newUser.EmailAddress = userName + "@SomeDomainName.com";
JSONObject jsonUser = new JSONObject(newUser, User.JSONFieldMap());
String userStringified = jsonUser.toString();
我不知道怎么做,或者是否有可能做到这样的事情:
User myUser = MagicJSONDeserializer.DeserializeIt("{ some JSON string}");
感谢您的帮助,我来自.net / C#/ Microsoft背景,因此Java对我来说是一个新手。
答案 0 :(得分:2)
该库不直接提供此类功能。您可以使用其他数百种Java JSON库,例如Gson,Jackson或flexjson。
间接这样做的方法是从JSON中检索每个值,并在将该值分配给对象字段之前对该值执行自定义反序列化。
答案 1 :(得分:0)
针对对其他解决方案感兴趣的人进行更新。可以使用com.fasterxml.jackson.databind
如下实现:
import com.fasterxml.jackson.databind.ObjectMapper;
String userStr = "{ \"NAME\" : \"John\" }";
User user = new ObjectMapper().readValue(userStr, User.class);
它使用ObjectMapper
将byte[]
或在这种情况下String
转换为Java对象。此解决方案需要类User
正确注释,例如使用@JsonProperty
注释。否则,它将无法将json键值与类属性匹配。
import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSetter;
public class User {
@JsonProperty("NAME")
String name;
@JsonGetter("NAME")
public String getName() {
return name;
}
@JsonSetter("NAME")
public void setName(String name) {
this.name = name;
}
}