如前所述,我知道我可以将Java对象转换为JSON(使用Jackson)
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json = ow.writeValueAsString(objectToBeConverted);
我知道我可以使用@JsonIgnore
注释排除JSON字符串中包含的字段,但是如果我想多次将相同的类转换为JSON,但每次都选择要忽略的不同字段,该怎么办?
例如,如果我有一堂课
class Foo {
int a;
int b;
...
}
我能做点像这样的事吗
Foo foo = new Foo();
String json1 = ow.writeValueAsString(foo).excludeField('b');
String json2 = ow.writeValueAsString(foo).excludeField('a');
这样产生的字符串看起来就像
// json1
{
a: 1234
}
// json2
{
b: 5678
}
如果杰克逊做不到,也许格森可以?或者另一个图书馆?
如果你能把所有的Foo
原语类型都框起来,这里有一个简单的方法。
例如:int-
@JsonInclude(Include.NON_NULL)
class Foo {
Integer a;
Integer b;
...
}
然后,只需复制一份
Foo
,并将要忽略的属性设置为null
。
java prettyprint-override">Foo foo = new Foo();
foo.setA(1234);
foo.setB(5678);
Foo foo1 = objectMapper.readValue(objectMapper.writeValueAsString(foo), Foo.class); // make a copy of Foo
foo1.setB(null); // force to ignore B
String json1 = ow.writeValueAsString(foo1); // it will be {a:1234}
您可以尝试使用不同的混合接口。我找到了两种方法。
>
使用读取属性的方法。然后,可以创建一个只定义要排除的属性的混合类:
public interface ExludeA {
@JsonIgnore
int getA();
}
使用@JsonIncludeProperties
不告诉要排除哪些属性,而是告诉要包括哪些属性:
@JsonIncludeProperties({ "b", "c" })
public interface ExludeA {
}
在这两种情况下,将该混合添加到对象映射器中:
objectMapper.addMixIn(Foo.class, ExcludeA.class);
但是有一件非常非常重要的事情——你必须为每一次混入使用一个新的ObjectMapper
。如果使用ObjectMapper
实例来序列化Foo
实例,而不使用mix-in,那么添加mix-in将没有帮助。这可能是因为ObjectMapper
实例缓存了一些东西。
根据您的需要有多种解决方案:
首先:
您可以为您的目的定义两个不同的DTO,每次您需要每个DTO时,只需使用它。
第二:
可以使用@JsonInclude(JsonInclude.Include.NON_NULL)
注释属性:
class Foo {
@JsonInclude(JsonInclude.Include.NON_NULL)
int a;
@JsonInclude(JsonInclude.Include.NON_NULL)
int b;
}
附言:你可以在课堂上使用这个注释:
@JsonInclude(JsonInclude.Include.NON_NULL)
class Foo {
int a;
int b;
}
第三:
Use可以定义一个过滤器,根据不同的条件忽略属性。
为筛选器定义一个简单的类:
public class YourConditionalFilter {
@Override
public boolean equals(int a) {
return a == 1234;
}
}
然后在属性顶部添加此过滤器作为注释:
@JsonInclude(value = JsonInclude.Include.CUSTOM, valueFilter = YourConditionalFilter.class)
int a;
如前所述,我知道我可以将Java对象转换为json(使用Jackson) 我知道我可以使用注释将字段排除在json字符串中,但是如果我想多次将同一个类转换为json,但每次都选择忽略不同的字段,该怎么办? 例如,如果我有一门课 我能做一些像 这样产生的字符串看起来就像 如果杰克逊做不到,也许格森可以?还是另一个图书馆? 任何帮助都将不胜感激!
问题内容: 我正在从String变量的Restful api获取数据,现在我想转换为JSON对象,但是在转换时会引发异常,这是我的问题。这是我的代码: 我的字符串包含 这是我想要在json中使用的字符串,但它向我显示了线程“ main”中的异常 问题答案: 的是本内的。您需要按层次分析JSON,以便能够正确获取数据。 注意:本示例使用类而不是。 正如“ Matthew”在他正在使用的注释中提到的那
我有一个json 我怎么把它转换成学生名单(A,理科)(B,理科)
问题内容: 我有一个场景。 必需的输入和输出是JSON。 我需要一些转换代码或最好是xslt类型的语言才能将json从一种格式转换为另一种格式。该变压器也需要快速运行,因为转换将即时进行。 编辑 我没有收到INPUT对象的定义,它可能会在运行时更改。但是如果需要,我可以将类用于OUTPUT对象。我尝试以 json- > xml-> xslt-> xml-> json的方式进行此操作 ,但 此刻 每
我想转换我的嵌套json消息,并使用Jolt规范只获取必需的文件- 我的输入JSON: 低于我的规格输出,这不是预期的- 我尝试了很多选择,但国籍不是我预期的输出。请在这里帮助颠簸转换
我一直在测试char casting,我经历了以下几点: 有人能解释为什么我在1中给字节添加了一个final时它工作得很好吗?