开源项目

相关文章

更多

最近更新

更多

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
}


相关问答

更多

Jackson UnrecognizedPropertyException(Jackson UnrecognizedPropertyException)

这里的问题是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)

ContextResolver为null,因为您实际上没有 ContextResolver 。 这是你需要自己写的东西。 @Provider @Produces("application/json") @Consumes("application/json") public class MapperContextResolver implements ContextResolver<ObjectMapper> { private final ObjectMapper mapper; ...

在Custom Class中使用Jackson的ObjectMapper(Using Jackson's ObjectMapper inside Custom Class)

当然,但你需要让它忽略jsonString属性,以避免无休止的递归调用。 将@JsonIgnore添加到getter。 或者命名你的方法,使它不再是属性,例如toJson() (这也是一个更好的名字,IMO)。 也就是说,每次创建一个新的ObjectMapper都不是一个好主意。 相反,你应该重复使用同一个,一劳永逸地构建。 Sure, but you need to make it ignore the jsonString property, to avoid that endless rec ...

Java - Jackson JSON Library和ObjectMapper.readValue(Java - Jackson JSON Library and ObjectMapper.readValue)

您可以创建一个类来映射患者; 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?)

Jackson的ObjectMapper在每个序列化请求上创建一个新的JsonGenerator 。 从这个意义上说,它保证是线程安全的。 我能看到的唯一可能导致你看到的行为的是你的CustomSerializer是否有一些它正在共享的实例字段,并且正在进行某种内部同步。 Jackson's ObjectMapper creates a new JsonGenerator on each request for serialization. In that sense, it is guarant ...

从Jackson 2.2的ObjectMapper中打印JSON(Pretty printing JSON from Jackson 2.2's ObjectMapper)

您可以通过在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(Seria ...

Jackson ObjectMapper,带'/'字符作为JSON键(Jackson ObjectMapper with '/' Character as JSON key)

问题出在getClass().getResource( "/my-file.json" ).getFile() 。 getFile()返回文件路径而不是文件内容。 ObjectMapper readValue(String content, ..)函数将内容作为其第一个参数。 您可以使用 Map value = om.readValue(getClass().getResourceAsStream("/my-file.json"), HashMap.class); om.readValue(ne ...

Jackson:使用UpperCamelCase为JSON编组(Jackson: marshal to JSON with UpperCamelCase)

编辑原始答案。 杰克逊使用camelCasing作为默认值。 他们实施了PascalCasing策略。 尝试这个: ObjectMapper mapper = new ObjectMapper(); mapper.setPropertyNamingStrategy(PropertyNamingStrategy.PASCAL_CASE_TO_CAMEL_CASE); 或使用@JsonProperty("UpperCaseProperty")注释您的字段 edited original answer ...

Jackson ObjectMapper setSerializationInclusion()不起作用(Jackson ObjectMapper setSerializationInclusion() not working)

使用它时不要更改ObjectMappers设置。 一旦使用映射器,由于序列化器和反序列化器的缓存,并非所有设置都生效。 配置一次实例,第一次使用后不要更改设置。 它通过这种方式实现线程安全性和性能。 http://wiki.fasterxml.com/JacksonFAQThreadSafety http://wiki.fasterxml.com/JacksonBestPracticesPerformance Do not change ObjectMappers settings while u ...

Spring Boot如何配置我的Jackson ObjectMapper?(How is Spring Boot configuring my Jackson ObjectMapper here?)

SpringBoot自己实例化ObjectMapper,因为Spring将Java对象转换为JSON,反之亦然。 所以如果它在类路径中找到Spring引导,它将加载objectMapper。 现在在configureJackson方法中,您已经引用了ObjectMapper和@Autowired注释,因此Spring将为此方法提供ObjectMapper的实例。 @Autowired注释正在做你所指的魔术。 @Autowired Fizz fizz(Buzz buzz) { new Fizz( ...