2013-04-17 3 views
0

Можете ли вы сказать мне, как я могу использовать Gson извлечь два различных объекта, определенного в этой строке: http://json.parser.online.fr/Gson объект десериализация

Я пытаюсь использовать

gson.fromJson(json, SeedAttribs.class); 

и

gson.fromJson(json, SettingsAttribs.class); 

но ни одна из них не работает. Я удивлен, почему нет. Мне также нужен способ заменить эту строку json, когда конкретный объект, например. SeedAttribs меняется. Мне нужен способ переписать его, а SettingsAttribs НЕ будет изменяться вообще.

Как это можно сделать?

Благодарим за ответы!

+0

Что ваш источник класса SettingsAttribs? – user1697575

+0

это в основном только класс модели с несколькими строковыми полями и его методами get/set ... – greengold

ответ

0

Убедитесь, что исходная строка JSon содержит правильный формат. Лучший способ - сериализовать ваш объект с помощью GSON. Вот код:

public static void main(String[] args) 
{ 
    Gson gson = new Gson(); 
    SettingsAttribs st = new SettingsAttribs(); 
    st.setField1("value1"); 
    st.setField2("value2"); 
    // report constructed object 
    System.out.println("st: " + st); 

    // serialize to json 
    String json = gson.toJson(st, SettingsAttribs.class); 
    System.out.println("json: " + json); 

    // deserialize form json 
    SettingsAttribs restoredSettings = gson.fromJson(json, SettingsAttribs.class); 
    System.out.println("restoredSettings: " + restoredSettings); 
} 

Он компилируется и запускается. Выход он производит:

st: SettingsAttribs [field1=value1, field2=value2] 
json: {"field1":"value1","field2":"value2"} 
restoredSettings: SettingsAttribs [field1=value1, field2=value2] 

И SettingsAttribs класс:

public class SettingsAttribs 
    { 
    private String field1; 
    private String field2; 

    public String getField1() 
    { 
     return field1; 
    } 

    public void setField1(String field1) 
    { 
     this.field1 = field1; 
    } 

    public String getField2() 
    { 
     return field2; 
    } 

    public void setField2(String field2) 
    { 
     this.field2 = field2; 
    } 

    @Override 
    public String toString() 
    { 
     return "SettingsAttribs [field1=" + field1 + ", field2=" + field2 + "]"; 
    } 
    } 
+0

да, это точно, как говорится в проектах gson. Но, пожалуйста, обратитесь к моему сообщению более тщательно! Мне нужен способ сериализации больше, например. 2 объекта (SettingsAttribs.class и SeedAttribs.class) и десериализовать, а затем после смены одного из них сериализовать измененную обратно на json-строку, а не на другую. Когда я читал о gson, мне показалось, что он должен работать так же, как с одним объектом, но, возможно, ошибся где-то – greengold

+0

Когда вы сериализуете измененный объект, вы уверены, что не переопределяете строку json другого экземпляра объекта? покажите свой код, как вы это делаете ... – user1697575

+0

well Im not. Если вы будете читать более внимательно, пожалуйста, вы бы знали, что это то, что я задаю здесь. если у меня есть gson.fromJson (json, SettingsAttribs.class); , тогда я могу извлечь атрибуты из строки json, которые содержат SettingsAttribs. Но после изменения этого объекта мне нужен способ превзойти json, состоящий из этого нового объекта и старых полей, которые не были извлечены из старой строки json Невозможно сделать ее более понятной – greengold

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