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
}


相关问答

更多

Firebase允许拒绝(Permission denied with Firebase)

您可以提供".read": "auth != null"以允许所有授权用户读取users对象下的数据并防止未经授权的用户阅读它。 You could give ".read": "auth != null" to allow all authorised users to read data under users object and prevent unauthorised users from reading it.

Python中的模块化编译器(Modular Compiler in Python)

您想使用像stevedore这样的现有插件库。 它将为您提供枚举可导入文件的工具,以及导入这些模块的工具。 You want to use an existing plugin library like stevedore. It will give you the tools to enumerate files that can be imported, and tools to import those modules.

澄清用户识别的AWS教程 - 变量发生变化(Clarifying AWS tutorial for User identification - variables change)

您应该将该代码放在实例化凭证提供程序的位置(理想情况下应该是单例)。 就区域而言,您可以尝试Regions.US_EAST_1而不是Regions.USEAST1吗? 如果您很好奇,Cognito 示例应用程序会有一个示例实现。 You should put that code wherever you instantiate the credentials provider (which should ideally be a singleton). As far as region, can

Delphi汇编调用(Delphi assembly calls)

LStrClr表示长字符串清除。 它习惯于清除长字符串变量。 换句话说,当你写: s := ''; 然后编译器将生成对运行时支持函数_LStrClr 。 在Unicode Delphi中,它将是_UStrClr ,其中U表示UnicodeString而不是AnsiString 。 这里没有官方文档,因为它是所有私有实现细节。 但是,有Delphi RTL的源代码。 如果你提到这一点,这样的电话很容易理解。 LStrClr means Long String Clear. It is used

如果在Python上使用raw_input的else语句问题(If…else statement issue with raw_input on Python)

raw_input的返回值是一个字符串,但是当你检查food的值时,你使用的是int。 实际上, if food == 1永远不能为True ,那么流程总是默认为复数形式。 你有两个选择: if int(food) == 1: 上面的代码会将food转换为整数类型,但如果用户没有输入数字,则会引发异常。 if food == '1': 上面的代码检查字符串 '1'而不是整数(注意周围的引号)。 The return value of raw_input is a string, but wh

相关文章

更多

最近更新

更多