2014-01-24 1 views
0

У меня есть JSON строки, как это -Как сопоставить два разных значения переменных в строке JSON с одной переменной класса?

String jsonString1 = "{\"warning\": \"user_id not found\", \"user_id\": some_user_id}"; 

or 

String jsonString2 = "{\"error\": \"user_id for wrong partition\", \"user_id\": some_user_id, \"partition\": some_partition}"; 

Я пытаюсь сопоставить выше JSON строку с ниже классом. Я использую GSON здесь -

public class ErrorResponseTest { 

    private String error; 
    private String user_id; 
    private String partition; 
    private String client_id; 

    // getters or setters 
} 

Постановка задачи:

Я хочу карту warning и error в вышеприведенном JSON строки в error переменной в моем выше классе. Но в настоящее время это отображение только jsonString2 ошибки переменным ..

С использованием коды ниже, я могу десериализацию jsonString2, а затем он показывает в переменных ошибках user_id for wrong partition. Но если я пытаюсь десериализации jsonString1 то это показывает нулевое значение в переменной ошибки ..

ErrorResponseTest hello = new Gson().fromJson(jsonString2, ErrorResponseTest.class); 

Можно ли сопоставить warning ошибки переменной, а в моем выше классе? Значение, если я десериализую jsonString1 с вышеуказанным классом, я хочу иметь user_id not found в переменной ошибки.

Можно ли это сделать?

+1

Не переусердствуйте. Создайте два класса: одно сопоставление 'jsonString1' и другое отображение' jsonString2'. ПОЦЕЛУЙ. Если вы DRYer, сделайте суперкласс, который содержит общие атрибуты. – Nishant

ответ

0

Вы можете рассмотреть 3 подхода:

  • взглянуть на пользовательские стратегиях именования, http://bethecoder.com/applications/tutorials/json/google-gson/custom-field-names-strategy.html и сходит с ума, пытаясь сопоставить два сериализованных имена только одно имя класса.
  • Создайте два разных класса, один для предупреждения и другой для ошибки, и общий родительский класс со всеми общими полями.
  • измените свой класс и добавьте поле 'errorLevel'. В thr json измените «error» и «warning» на что-то вроде «message» и добавьте также поле «error_level».

Я бы предпочел третий подход, поэтому у вас есть только один класс, а модель сообщения об ошибке json более автономна, более читаема, например, для некоторых.

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