【问题标题】:gson: ignore inner json [closed]gson:忽略内部 json [关闭]
【发布时间】:2020-07-07 09:50:51
【问题描述】:

我需要将内部 json 提取为字符串。使用 Gson。它失败了。

public class PagenatedJSON {
    @SerializedName("content")
    @Expose
    private List<String> content;
    
    @SerializedName("totalPages")
    @Expose
    private Long totalPages;
    
    @SerializedName("number")
    @Expose
    private Long number; // num of page
}

因此,存在复杂的未知内部类“内容”。我需要把它作为字符串。所以它不需要任何解析。但是 gson 尝试这样做:com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 14 path $.content[0]

如何忽略内部解析?

【问题讨论】:

  • 您应该将实际的 JSON 添加到您的问题中。
  • 根据什么规则,您希望将内部 JSON 结构作为字符串?没有默认行为!
  • 为此,发送 JSON 的客户端需要对其进行相应的格式化。您目前可能拥有的是:{'content':{...}}。相反,客户端应该发送的内容是:{'content':"{...}"}。
  • @RealSkeptic,为什么?它必须通过通用解决方案与任何数据一起使用。
  • JSON 文件旨在表示对象、数组和其中元素的层次结构。如果意图是元素之一是字符串而不是对象,则不应将其表示为 JSON 中的对象,而应表示为字符串。更改 JSON 的逻辑是可能的,但不,这不是常见的事情,也没有简单的解决方案。如果您有一个 错误表示数据的 JSON,那么您必须编写自定义代码来解析它。

标签: java json parsing gson


【解决方案1】:

解决我的问题的最佳方法是将“内容”类型设置为对象 (private List&lt;Object&gt; content;)。 它解析没有错误并获得可序列化的变量 - 所以它可以转换回字符串。

但它有副作用:数字类型可能被识别错误。

【讨论】:

  • 感谢@sbsatte 做出这个决定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-25
  • 2021-05-26
  • 2018-07-11
  • 1970-01-01
相关资源
最近更新 更多