2013-03-06 126 views
0

我有以下类JSON字符串到java对象

public class ReturnData { 
    public ReturnData() { 
     OperationResult = Result.Failed; 
     Messages = "An Error Occured"; 
     UpdateAvailable = "0"; 
     ResultData = ""; 
    } 

    public Result OperationResult; 
    public String Messages; 
    public String UpdateAvailable; 
    public Object ResultData; 
} 

我有JSON字符串一样,

{"OperationResult":0,"Messages":"","UpdateAvailable":"","ResultData":{"SessionId":"3b44a524-fc2a-499b-a16e-6d96339a6b5b","UserName":"admin","AccoundId":null,"Roles":["Administrator"],"DisplayName":"Admin","Status":3,"Type":1}} 

我想这个JSON字符串分配给上述class.I'm使用GSON将json字符串分配给java对象。在普通类中,我可以将json字符串分配给java对象。但是对于这个班级我不能直接分配。请任何一个可以帮助我, 现在我像分配,

String formatedjsonstring = {json string}; 
      Log.i("FORMAT STRING:",formatedjsonstring); 
      Gson gson = new Gson(); 
      ReturnData returndata = (ReturnData) gson.fromJson(
        formatedjsonstring, ReturnData.class); 
+0

你会得到什么错误?尝试将你的公共领域变为私人领域并产生公共领导者和获得者。 – Nachi 2013-03-06 11:27:22

回答

0

因为你的Java类并不像你的JSON以任何方式,形状或形式...你”会有这个问题。

  • 问题1:OperationResult应该是一个int
  • 问题2:你宣布ResultDataObject ... Java不工作这样的。

你需要你的POJO相匹配的JSON:

public class ReturnData { 
    public ReturnData() { 
     OperationResult = Result.Failed; 
     Messages = "An Error Occured"; 
     UpdateAvailable = "0"; 
     ResultData = ""; 
    } 

    public int OperationResult; 
    public String Messages; 
    public String UpdateAvailable; 
    public MyResultData ResultData; 
} 

class MyResultData { 
    public String SessionId; 
    public String UserName; 
    public String AccountId; 
    public List<String> Roles; 
    public String DisplayName; 
    public int Status; 
    public int Type; 
} 

ReturnData rd = new Gson().fromJson(jsonString, ReturnData.class); 

我还考虑使用GSON的@SerializedName("name")标注到PascalCase字段名称转换成你的JSON在Java驼峰字段名。

@SerializedName("OperationResult") public int operationResult; 
1

你可以从SourceForge使用JavaJson。你可以将你的json字符串传递给JsonObject .parse()

试试这个

JsonObject json = JsonObject .parse("{\"OperationResult\":0, \"Messages\":\"UpdateAvailable\""); 
System.out.println("OperationResult=" + json.get("OperationResult")); 
System.out.println("Messages=" + json.get("Messages")); 

https://sourceforge.net/projects/javajson/

+0

我收到这个JSONParser无法解析到类型 – 2013-03-06 12:10:02

+0

未定义类型为JSONObject的方法parse(String) – 2013-03-06 12:27:53

+0

请确保您正在使用'javajson'库中的'JsonObject'。 – deadlock 2013-03-06 12:29:29

-1

试试这个:

java.lang.reflect.Type type = new TypeToken<ReturnData>(){}.getType(); 
ReturnData rd = new Gson().fromJson(jsonString, type); 
+0

当我检查returndata.OperationResult或东西我变空。但在jsonstring有价值 – 2013-03-06 12:46:10