Json基础教程
Jackson教程
- Jackson介绍
- Jackson入门程序
- Jackson ObjectMapper实现JSON实际的读/写
- Jackson对象序列化/反系列化
- Jackson数据绑定
- Jackson JSON映射到任何Java对象
- Jackson使用具体的Java对象和类型强制转换到JSON使用
- Jackson树模型JsonNode
- Jackson流式API JsonGenerator、JsonParser
Gson教程
开源项目
知识点
相关文章
更多最近更新
更多Jackson ObjectMapper实现JSON实际的读/写
2019-05-09 23:21|来源: 网路
ObjectMapper类是Jackson库的主要类。它提供一些功能将转换成Java对象匹配JSON结构,反之亦然。它使用JsonParser和JsonGenerator的实例实现JSON实际的读/写。
类声明
以下是org.codehaus.jackson.map.ObjectMapper类的声明:
public class ObjectMapper extends ObjectCodec implements Versioned
嵌套类
S.N. | 类 & 描述 |
---|---|
1 | static class ObjectMapper.DefaultTypeResolverBuilder 定制TypeResolverBuilder,提供所谓的“默认输入”使用类型解析构建器(见enableDefaultTyping()了解详细信息)。 |
2 | static class ObjectMapper.DefaultTyping 使用enableDefaultTyping()枚举指定什么样的类型(类)默认输入应该使用。 |
构造函数
S.N. | 构造函数 & 描述 |
---|---|
1 | ObjectMapper() 默认的构造函数,这将构建默认JsonFactory必要时使用StdSerializerProvider作为其SerializerProvider,并BeanSerializerFactory作为其SerializerFactory。 |
2 | ObjectMapper(JsonFactory jf) 构造使用指定的JsonFactory构建必要的JsonParsers和/或JsonGenerators映射。 |
3 | ObjectMapper(JsonFactory jf, SerializerProvider sp, DeserializerProvider dp) |
4 | ObjectMapper(JsonFactory jf, SerializerProvider sp, DeserializerProvider dp, SerializationConfig sconfig, DeserializationConfig dconfig) |
5 | ObjectMapper(SerializerFactory sf) 不推荐使用。使用其他构造来代替; 注意,可以设置序列化工厂setSerializerFactory(org.codehaus.jackson.map.SerializerFactory) |
继承的方法
这个类继承了以下类方法:
java.lang.Object
ObjectMapper示例
选择使用任何编辑器创建以下java程序在 C:/> Jackson_WORKSPACE
File: JacksonTester.java
import java.io.IOException; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.SerializationConfig; public class JacksonTester { public static void main(String args[]){ ObjectMapper mapper = new ObjectMapper(); String jsonString = "{\"name\":\"Mahesh\", \"age\":21}"; //map json to student try { Student student = mapper.readValue(jsonString, Student.class); System.out.println(student); mapper.enable(SerializationConfig.Feature.INDENT_OUTPUT); jsonString = mapper.writeValueAsString(student); System.out.println(jsonString); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } class Student { private String name; private int age; public Student(){} public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String toString(){ return "Student [ name: "+name+", age: "+ age+ " ]"; } }
验证结果
使用 javac 编译如下类:
C:\Jackson_WORKSPACE>javac JacksonTester.java
现在运行jacksonTester看到的结果:
C:\Jackson_WORKSPACE>java JacksonTester
验证输出
Student [ name: Mahesh, age: 21 ] { "name" : "Mahesh", "age" : 21 }
相关问答
更多-
这里的问题是OP混合了两种不同的Jackson版本: 1.9来自org.codehaus ( org.codehaus.jackson.map.exc.UnrecognizedPropertyException显示) 来自com.fasterxml 2.x(在进口import com.fasterxml.jackson.annotation.可见import com.fasterxml.jackson.annotation. ) 正如山姆在评论中指出的那样,OP应该只使用一个版本。 使用2.x进行反序列化或 ...
-
重用Jackson ObjectMapper和JsonFactory实例(Reuse Jackson ObjectMapper and JsonFactory instances)[2022-10-24]
ContextResolver为null,因为您实际上没有 ContextResolver 。 这是你需要自己写的东西。 @Provider @Produces("application/json") @Consumes("application/json") public class MapperContextResolver implements ContextResolver{ private final ObjectMapper mapper; pu ... -
当然,但你需要让它忽略jsonString属性,以避免无休止的递归调用。 将@JsonIgnore添加到getter。 或者命名你的方法,使它不再是属性,例如toJson() (这也是一个更好的名字,IMO)。 也就是说,每次创建一个新的ObjectMapper都不是一个好主意。 相反,你应该重复使用同一个,一劳永逸地构建。 Sure, but you need to make it ignore the jsonString property, to avoid that endless recursiv ...
-
Java - Jackson JSON Library和ObjectMapper.readValue(Java - Jackson JSON Library and ObjectMapper.readValue)[2022-09-05]
您可以创建一个类来映射患者; private static class Patient { @JsonProperty("name") private String name; @JsonProperty("age") private int age; public Patient() { } public String getName() { return name; } public int getAge() { ... -
Jackson ObjectMapper和JsonGenerator - 它是线程安全的吗?(Jackson ObjectMapper & JsonGenerator - is it thread-safe?)[2022-10-07]
Jackson的ObjectMapper在每个序列化请求上创建一个新的JsonGenerator 。 从这个意义上说,它保证是线程安全的。 我能看到的唯一可能导致你看到的行为的是你的CustomSerializer是否有一些它正在共享的实例字段,并且正在进行某种内部同步。 Jackson's ObjectMapper creates a new JsonGenerator on each request for serialization. In that sense, it is guaranteed t ... -
您可以通过在ObjectMapper上设置SerializationFeature.INDENT_OUTPUT来启用漂亮打印,如下所示: mapper.enable(SerializationFeature.INDENT_OUTPUT); You can enable pretty-printing by setting the SerializationFeature.INDENT_OUTPUT on your ObjectMapper like so: mapper.enable(Serializat ...
-
问题出在getClass().getResource( "/my-file.json" ).getFile() 。 getFile()返回文件路径而不是文件内容。 ObjectMapper readValue(String content, ..)函数将内容作为其第一个参数。 您可以使用 Map value = om.readValue(getClass().getResourceAsStream("/my-file.json"), HashMap.class); om.readValue(new Fil ...
-
编辑原始答案。 杰克逊使用camelCasing作为默认值。 他们实施了PascalCasing策略。 尝试这个: ObjectMapper mapper = new ObjectMapper(); mapper.setPropertyNamingStrategy(PropertyNamingStrategy.PASCAL_CASE_TO_CAMEL_CASE); 或使用@JsonProperty("UpperCaseProperty")注释您的字段 edited original answer. Jac ...
-
使用它时不要更改ObjectMappers设置。 一旦使用映射器,由于序列化器和反序列化器的缓存,并非所有设置都生效。 配置一次实例,第一次使用后不要更改设置。 它通过这种方式实现线程安全性和性能。 http://wiki.fasterxml.com/JacksonFAQThreadSafety http://wiki.fasterxml.com/JacksonBestPracticesPerformance Do not change ObjectMappers settings while using ...
-
Spring Boot如何配置我的Jackson ObjectMapper?(How is Spring Boot configuring my Jackson ObjectMapper here?)[2023-06-15]
SpringBoot自己实例化ObjectMapper,因为Spring将Java对象转换为JSON,反之亦然。 所以如果它在类路径中找到Spring引导,它将加载objectMapper。 现在在configureJackson方法中,您已经引用了ObjectMapper和@Autowired注释,因此Spring将为此方法提供ObjectMapper的实例。 @Autowired注释正在做你所指的魔术。 @Autowired Fizz fizz(Buzz buzz) { new Fizz(buzz) ...