如何使用JSON.org在Java中反序列化JSON

时间:2014-07-03 02:42:37

标签: java json serialization org.json

我正在使用" 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对我来说是一个新手。

2 个答案:

答案 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);

它使用ObjectMapperbyte[]或在这种情况下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;
    }
}