2012-11-16 52 views
0

在我的項目中,我使用的是gson。我有一個問題,當我想反序列化一個JSON子對象形成我的類將字符串 例如gson反序列化到java中的字符串

Class X 
{ 
    Object1 x1 // expected json -> '{"param1": "pvalue", "param2":"pvalue"}' 
    Object2 x2 //expected json -> '{"param1": "pvalue", "param2":"pvalue"}' 
    String x3 //expected json ->'{"param1": "pvalue", "param2":"pvalue"}' 
} 

GSON不能反序列化X3,因爲它的內容是JSON對象,但我需要它作爲一個字符串而不是Java對象。 class X Object1 x1 // expected json - >'{「param1」:「pvalue」,「param2」:「pvalue」}' Object2 x2 // expected json - >'{「param1」:「pvalue」 ,「param2」:「pvalue」}' String x3 // expected json - >'{「param1」:「pvalue」,「param2」:「pvalue」}' } 如何保存x3的內容一個String而不是一個對象。
謝謝

+0

你在s3期望的是什麼字符串值? – waqaslam

回答

0

您可以嘗試爲該字符串註冊一個自定義TypeAdapter並對其進行修復。

GsonBuilder gson = new GsonBuilder(); 
gson.registerTypeAdapter(String.class, new MyTypeAdapter()); 

Gson gson = gsonBuilder.create(); 
.... 

Javadoc User Guide

+0

感謝您的回答,你能更具體的如何做到這一點,請,謝謝 – user1796624

0

下面的代碼工作得很好。不確定這是否是您正在嘗試解析的Json結構。

public class Test 
{ 
    public static void main(String[] args) 
    { 
     Gson gson = new Gson(); 

     Response response = gson.fromJson(THE_JSON, Response.class); 

     System.out.println(response.object1); 
     System.out.println(response.object1); 
     System.out.println(response.stringx); 
    } 

    class Response 
    { 
     @SerializedName("Objectx1") 
     Objectx object1; 

     @SerializedName("Objectx2") 
     Objectx object2; 

     @SerializedName("Stringx") 
     String stringx; 

     class Objectx 
     { 
      @SerializedName("param1") 
      String param1; 

      @SerializedName("param2") 
      String param2; 
     } 
    } 
} 

而且THE_JSON是:

{ 
    "Objectx1": { 
     "param1": "value1", 
     "param2": "value2" 
    }, 
    "Objectx2": { 
     "param1": "value3", 
     "param2": "value4" 
    }, 
    "Stringx": '{ 
     "param3": "value3", 
     "param4": "value4" 
    }' 
} 

注意周圍的字符串X值的單quoutes。

+0

嗨,謝謝你的答覆byt我得到java.lang.IllegalStateException:期望一個字符串,但是BEGIN_OBJECT E/AndroidRuntime(2705):在com.google.myjson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.read(ReflectiveTypeAdapterFactory.java:174)。問題在於Stringx變量,我無法將其解析爲字符串我只是不明白爲什麼如果一個字符串的內容是Json對象,它不能被序列化爲字符串。我可能有一個老版本的圖書館 – user1796624