2013-03-06 2 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

ответ

0

Поскольку ваш класс Java не похож на ваш JSON каким-либо образом, или иной форме ... вы» у меня будет проблема с этим.

  • Проблема № 1: OperationResult должен быть int
  • Проблема № 2: Вы объявили ResultData как Object ... 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); 

Я бы также рассмотреть возможность использования @SerializedName("name") аннотацию Gson, чтобы преобразовать PascalCase имена полей в вашем JSON к именам верблюжьего поля в Java.

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

Вы можете использовать JavaJson от SourceForge. Вы можете передать строку 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 не может быть разрешен для типа –

+0

Метод parse (String) не определен для типа JSONObject –

+0

Убедитесь, что вы используете 'JsonObject' из библиотеки' javajson'. – deadlock

-1

Попробуйте это:

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

когда я проверяю returndata.OperationResult или что-то, что я получаю null. Но в jsonstring, имеющем ценность –

Смежные вопросы