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

对象序列化为json,仅限于某些字段

江佐
2023-03-14

我有一个大的嵌套对象。我想在JSON字符串中序列化这个对象,但是我只需要包含某些字段。这里的问题是字段可能会非常频繁地更改,我希望以一种可以帮助我轻松包含或排除用于序列化的字段的方式来构建它。

我知道我可以编写很多代码来提取某些字段并“手动”构建JSON。但我想知道,除了指定一个必填字段列表之外,是否还有其他优雅的方法可以实现类似的结果?

例如,我希望在响应中只包含idname以下对象结构:

class Building {
    private List<Flat> flats;
}

class Flat {
    private Integer id;     
    private Person owner;
}


class Person {
    private String name;
    private String surname;
}

Json:

{
    "flats" : [
        {
            "flat":
            {
                "id" : "1",
                "person" : {
                    "name" : "John"
                }
            }
        }
    ]
}

共有3个答案

易琛
2023-03-14

如果使用Gson,请研究如何使用排除策略

使用它们是一种更灵活的控制序列化的方法,因为它允许决定每个序列化要序列化的内容。

如果需要更改要序列化的内容,使用注释需要稍后从字段中添加/删除这些注释。

在你的例子中,后者可能更合适。

这个问题可能是使用gson序列化java对象的好起点

董鸣
2023-03-14

使用com.fasterxml.jackson.annotation.JsonIgnore是实现这一点的另一种方法。

import com.fasterxml.jackson.annotation.JsonIgnore;

class Person {
    private String name;
    @JsonIgnore
    private String surname;
}

当解析器将bean转换为json时,它将忽略姓氏。类似的注释将在其他json处理库中提供。

任绪
2023-03-14

您可以使用gson来序列化/反序列化JSON。然后,您可以包含@Exals注释,以便仅使用所需的字段。

还要确保将Gson对象配置为仅序列化“暴露”字段。

Gson gson = GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();

备选方案:

实际上,你可以反其道而行之,标记不会暴露的字段。您可以使用transient关键字来实现这一点。所以,不管你想忽略什么,只需在其中添加transient。下面是它在gson上的工作原理。

PS:这也适用于大多数JavaJSON序列化程序。

 类似资料:
  • 我有一个Java对象,我想序列化为JSON。但是,在此之前,我为该对象的字段设置了一些属性。现在我想将这个对象序列化为JSON。如何仅序列化显式赋值的字段,而基本上排除所有其他字段? 对我来说,在对象类上添加这些注释是不起作用的:和。原因是我有一些基本数据类型的字段。通过添加上述两个注释之一,我并没有阻止原始数据类型字段被序列化。例如,我有几个布尔字段,它们将被序列化为默认值。但是,我不希望这些字

  • 我使用Gson与改造。我的服务器接受空值,所以在我给的gson构建器 这样就不会忽略空值。但是在一些s中,我有一个特殊的情况,其中一些字段应该存在,即使是它的null,而其他一些字段如果是null也不应该序列化。 例如,如果我有一个请求类,比如 如果我有一个请求,其中和,应该将其序列化如下: 这意味着,如果type为null,它应该忽略该字段,但是如果id为null,它应该在请求中显示为null。

  • 问题内容: 如何在JavaScript中将对象序列化为JSON? 问题答案: 您正在寻找。

  • 问题内容: 有没有一种使用Jackson JSON Processor进行自定义字段级序列化的方法?例如,我想上课 序列化为以下JSON: 请注意,age = 25被编码为 数字, 而favoriteNumber = 123被编码为 string 。开箱即用的杰克逊将集结到一个号码。在这种情况下,我希望将favoriteNumber编码为字符串。 问题答案: 您可以实现自定义序列化器,如下所示:

  • 问题内容: 我有这个JavaScript原型: 然后创建一个新对象: 如果我做: 结果是: 但我需要将对象的类型包含在JSON字符串中,如下所示: 有没有使用框架之类的方法来执行此操作的快速方法?还是我需要在类中实现一个方法并手动执行? 问题答案: 编辑: 将字符串化 所有类的 “属性”。如果只想保留其中一些,则可以这样分别指定:

  • 问题内容: 因此,当我偶然发现新的JsonSerializable Interface 时,我在php.net上四处徘徊,以获取有关将PHP对象序列化为JSON的信息。它只是 PHP > = 5.4,而我正在5.3.x环境中运行。 PHP <5.4如何实现这种功能? 我还没有使用JSON进行很多工作,但是我试图在应用程序中支持API层,并且将数据对象( 否则将发送到视图 )转储到JSON中将是完美