简体   繁体   English

将json对象转换为java对象。 未知类别

[英]Convert json object to java object. Unknown class

I want to use a JSONObject (net.sf.json) stored as a string in a database, and set and get attributes from this JSONObject. 我想使用以字符串形式存储在数据库中的JSONObject(net.sf.json),并从此JSONObject设置和获取属性。 I want to get java objects stored in this JSONObjects (of unknown class at compile time). 我想获取存储在此JSONObjects中的Java对象(在编译时为未知类)。 How can I do this? 我怎样才能做到这一点?

// Let's say I have a POJO "User" with getters and setters
public static void main(String[] args)
{
    User user = new User();
    JSONObject jsonObject = new JSONObject();
    jsonObject.put("user", user);
    User u = getAttribute("user", jsonObject);
}

public static <T> T getAttribute(String key, JSONObject json)
{
    Type typeOfT = new TypeToken<T>(){}.getType();
    return new Gson().fromJson(json.toString(), typeOfT);
}

This gives error: com.google.gson.internal.LinkedTreeMap cannot be cast to User 出现错误:com.google.gson.internal.LinkedTreeMap无法转换为用户

I've also tried with: 我也尝试过:

public static <T> T getAttribute(String key, JSONObject json, Class<T> type)
{
    return new Gson().fromJson(json.toString(), type);
}

Any tips? 有小费吗?

You can use Gson google library for converting json object into Java class runtime. 您可以使用Gson谷歌库将json对象转换为Java类运行时。 Gson library has a method fromJson(String,className). Gson库具有fromJson(String,className)的方法。 Its take 2 argument first String which contains json data and second class Name you want to convert and finally its return Java class Object 它带有2个参数,第一个包含json数据的String和要转换的第二个Name,最后返回Java类Object

Try this: 尝试这个:

public static void main(String[] args){
    User user = new User();
    Gson gson = new Gson();
    String json = gson.toJson(user);
    User u = getAttribute(json);
}

public static <T> T getAttribute(String json, Class<T> type){
    return new Gson().fromJson(json, type);
}

I am not sure but this should also work - JSONObject jsonObject = new JSONObject(user); 我不确定,但这也应该工作JSONObject jsonObject = new JSONObject(user); , and not jsonObject.put("user", user); ,而不是jsonObject.put("user", user);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM