当前位置: 首页 > 知识库问答 >
问题:

使用GSON反序列化内部json字符串属性

翟泰
2023-03-14

我的后端使用Springboot和Gson。我有这两个类的多对多关系:

订单类

@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table( name = "orders")
public class Order {
    @Id
    @Expose
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    @Expose
    @NotBlank
    private String poNumber;
    @Expose
    @NotBlank
    private String dimension;
    @Expose
    @NotBlank
    private int initialQuantity;
    @Expose
    @NotBlank
    private int leftQuantity;
    @Expose
    @NotBlank
    private Date startDate;
    @Expose
    @NotBlank
    private Date endDate;
    @Expose
    @SerializedName("status")
    @Enumerated(EnumType.STRING)
    @Column(length = 20)
    private PoStatus status;

    @OneToMany(mappedBy="order")
    private Set<Log> logs;

    @Expose
    @SerializedName("products")
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable( name = "orders_products",
            joinColumns = @JoinColumn(name = "order_id"),
            inverseJoinColumns = @JoinColumn(name = "sap_code"))
    private Set<Product> products = new HashSet<>();

产品类别

@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table( name = "products")
public class Product {
    @Expose
    @Id
    @NotBlank
    private String sapCode;
    @Expose
    @NotBlank
    private String sapCodeDescription;
    @Expose
    private String productData;
}

这是我用来向restendpoint提供数据的服务

public String getAllOrders() {
    List<Order> allOrders = orderRepository.findAll();
    String allOrdersResult = gson.toJson(allOrders);
    return allOrdersResult;
}

以下是回应:

   [
   {
       "id": 1,
       "poNumber": "003100059361",
       "dimension": "INTBKGR",
       "initialQuantity": 200000,
       "leftQuantity": 200000,
       "startDate": "17/08/2022 00:00",
       "endDate": "17/08/2022 00:00",
       "status": "READY",
       "products": [
           {
               "sapCode": "000000000000416234",
               "sapCodeDescription": "1.STUFE 15X",
               "productData": "{\"pieces\": 85, \"mark\": true, \"description\": \"elementum pellentesque quisque porta volutpat erat quisque erat eros viverra eget congue eget\"}"
           }
       ]
   }
]

我的目标是反序列化/转义productDataString属性。

我尝试过创建一个ProductData类并使用@JsonAdapter注释,但据我所知,当您需要为反序列化提供自定义行为时使用此注释,我示例中的JSON字符串非常简单,我不需要任何特定的逻辑。

共有1个答案

董新觉
2023-03-14

我认为您必须为此声明一个类,并将productData类型从string更改为该类。

 类似资料:
  • 问题内容: 所有,我都有以下输出/字符串(它是JIRA API的响应): 我用于遍历元素并获取值。我在下面的“嵌套对象”示例中编写了类 http://www.javacreed.com/gson-deserialiser- example/ 我能够获得到第二级的元素值。例如:在此级别之前,我能够获得的值以及其他值。我如何获得的价值? 我应该如何构造我的解串器和类。请协助。谢谢。 问题答案: 试试这

  • 我正在尝试使用gson从JSON对象反序列化数据。我有麻烦1)设计一个类。2)从内部列表对象获得一个空对象。 以下是JSON对象的示例 下面是我为json对象创建的类的一个示例,该类将与使用java的gson一起使用 下面是使用gson的示例代码 任何帮助都将不胜感激,我对GSON和检索JSON对象非常陌生。非常感谢你

  • 问题内容: 我有一些具有各种属性的JSON,其中大多数是简单数据类型。但是,我在JSON中有一个属性,当我将其反序列化为C#类时,我只需要将其反序列化为字符串即可。 JSON示例: 除了将是有效的JSON对象外,“ json”对象没有任何设置结构。 因此,在上面的示例中,“ json”的值是一个JSON对象-但是当它反序列化时,我需要将它作为字符串。 因此,如果我的C#类是: 然后,如果我使用:

  • 问题内容: 我在反序列化以下json数组时遇到麻烦(对不起,大小): 如果将其粘贴到json-viewer中,则会得到以下结构: 现在,包含具有坐标的数组的数组具有可变大小。所以我想在Java中,整个对象应该是一个数组,其中包含数组的集合,每个数组都包含一个。就像是 但是gson不接受这一点。我收到以下错误消息: 这似乎很奇怪,因为对我来说好像不像一个数组。但这可能使我感到困惑,或多或少地迷路了…

  • 问题内容: 由于要执行处理的业务逻辑,因此我正在实现自定义。但是某些部分可以解析为标准方式。这是否可能- 我自己处理一些元素,并让一些嵌套元素自动处理? 这是JSON: 这是项的自定义反序列化器: 现在,我想让GSON解析枚举。我可以自己完成,这只是几行代码,但是我更愿意库做很多。 问题答案: …但是我希望图书馆尽其所能。 好吧,只需使用Gson。 有数据传输对象模式,尤其是Gson映射类,可以完

  • 我想使用Gson将JSON反序列化为对象。我已经定义了相应的类,其中一些类的对象包含在其他对象中。在尝试反序列化整个JSON时,我得到了空值,所以我开始将其拆分。 我已经到了所有低级类都支持自己的地步,但是当我试图反序列化成一个包含那个较小对象的实例的对象时,所有的东西都返回为null。 我的部分JSON: UserProfile类: UPfield类: 用户类: Ufield类: 我的主要观点是