2017-06-29 91 views
0

在Java中使用GSON是否有任何注释,我可以指出一个字段,即使它是一个对象,它应该将其保留为原始字符串。 ?使用GSON不解析字段,只保留它与json原始字符串

或者什么是最简单的方法来实现呢?

//This is the original 
    @SerializedName("perro") 
    public Perro perro 

//This is what I want to achieve 
    @SerializedName("perro") 
    public String perro 

So the result should be 
perro = "{"Users":[{"Name":"firulais","Raza":"beagle"},{"Name":"Spike","Value":"Terrier"}]}" 
+0

我不明白。 Java'String'将被序列化为JSON字符串。你能用一个例子来澄清吗? –

+0

所以说我有一个Java类的调用Animal.java有很多字段之一是调用Perro哪一个对象,所以如果我有一个字符串响应,它实际上是一个JSON,那么如果我做的动物动物= gson.fromJson(response,Animal.class),然后我希望Perro字段保留为json原始字符串,而不是将其解析为Perro对象。 –

+0

请使用示例JSON有效内容编辑您的问题。如果你的字段是'Object'类型的,并且它实际上是JSON中的JSON字符串,我相信Gson将无法解析。如果它是'Object',Gson需要一个JSON对象。 –

回答

2

唯一我发现这个工作的方式是使用

public JsonElement perro; 
0

您应该能够使用public JsonObject perro;

然后可以调用gson.toJson(perro)得到String值。

+0

我试过使用@SerializedName(“perro”) public JsonObject perro但不工作 –

+0

@KenenisaBekele你可以包括你正在转换的完整的JSON字符串......我使用的方法,我在我的答案中提到的几个地方JSON有效载荷中的字段包含另一个JSON字符串.....但也许是什么你有没有这种情况。 –

+0

没有理由再次涉及'Gson'实例。只需使用'perro.toString()'来获取'String'表示。 –

1

基本上说,你需要创建一个自定义的gson TypeAdapter类,并自己写入从Object到String的转换登录名。

然后注释该字段,指出要使用gson读取/写入它的TypeAdapter。

在这篇博客文章的更多细节:Gson TypeAdapter Example

例子:Prasing类对象作为原始JSON字符串

public class StringTypeAdapter extends TypeAdapter<String> { 

    @Override 
    public void write(JsonWriter out, String value) throws IOException { 
     try { 
      JSONObject jsonObject = new JSONObject(value); 
      out.beginObject(); 
      Iterator<String> iterator = jsonObject.keys(); 
      while (iterator.hasNext()) { 
       String key = iterator.next(); 
       String keyValue = jsonObject.getString(key); 
       out.name(key).value(keyValue); 
      } 
      out.endObject(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public String read(JsonReader in) throws IOException { 
     in.beginObject(); 
     JSONObject jsonObject = new JSONObject(); 
     while (in.hasNext()) { 
      final String name = in.nextName(); 
      final String value = in.nextString(); 
      try { 
       jsonObject.put(name, value); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
     in.endObject(); 
     return jsonObject.toString(); 
    } 
} 

使用TypeAdapter:

@JsonAdapter(StringTypeAdapter.class) 
private String someClass; // Lazy parsing this json 
+0

我试过使用TypeAdapter,但如何将JsonReader中,转换为原始字符串? –

+0

用一个示例将我的答案更新为将类对象解析为原始JSON字符串。 – mrsegev

+0

这一个没有工作,而正在阅读,如果有一个JSONObject作为一个字符串,然后它得到一个异常 –

相关问题