Jackson JSON映射到任何Java对象

2019-05-09 23:27|来源: 网路

全屏

完全数据绑定是指JSON映射到任何Java对象。

//Create an ObjectMapper instance
ObjectMapper mapper = new ObjectMapper();	
//map JSON content to Student object
Student student = mapper.readValue(new File("student.json"), Student.class);
//map Student object to JSON content
mapper.writeValue(new File("student.json"), student);

让我们来看看简单的数据操作绑定。在这里,我们将直接映射Java对象到JSON,反之亦然。

创建一个名为JacksonTester在Java类文件目录 C:\>Jackson_WORKSPACE.

File: JacksonTester.java

import java.io.File;
import java.io.IOException;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

public class JacksonTester {
   public static void main(String args[]){
      JacksonTester tester = new JacksonTester();
      try {
         Student student = new Student();
         student.setAge(10);
         student.setName("Mahesh");
         tester.writeJSON(student);

         Student student1 = tester.readJSON();
         System.out.println(student1);

      } catch (JsonParseException e) {
         e.printStackTrace();
      } catch (JsonMappingException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }

   private void writeJSON(Student student) throws JsonGenerationException, JsonMappingException, IOException{
      ObjectMapper mapper = new ObjectMapper();	
      mapper.writeValue(new File("student.json"), student);
   }

   private Student readJSON() throws JsonParseException, JsonMappingException, IOException{
      ObjectMapper mapper = new ObjectMapper();
      Student student = mapper.readValue(new File("student.json"), Student.class);
      return student;
   }
}

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: 10 ]


相关问答

更多

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 API将json字符串映射到java对象(Unable to map json string to java object using jackson API)

您正在使用JAXB注释,因此您需要使用正确的模块正确配置ObjectMapper ; 你需要jackson-module-jaxb-annotations项目。 使用您喜欢的依赖管理系统添加它,并像这样使用它: JaxbAnnotationModule module = new JaxbAnnotationModule(); // configure as necessary objectMapper.registerModule(module); 注意:这是针对Jackson 2.x. Jac ...

使用Jackson JSON解析Spring MVC中的JSON(Parsing JSON in Spring MVC using Jackson JSON)

使用像Jackson这样的映射技术的关键是你可以使用Objects(你不必自己解析JSON)。 定义一个Java类,类似于您期待的JSON。 例如这个JSON: { "foo" : ["abc","one","two","three"], "bar" : "true", "baz" : "1" } 可以映射到这个类: public class Fizzle{ private List<String> foo; private boolean bar; private in ...

Jackson TypeReference使用内部类(Jackson TypeReference using inner class)

Java有一种称为类型擦除的东西。 这意味着,一旦编译,你的 List<myObject> listOfObjects = new ArrayList<myObject>(); 变 List listOfObjects = new ArrayList(); 因此,一旦运行你的程序,杰克逊就无法判断你是否期望返回myObject的列表。 相反,它返回LinkedHashMap的列表。 通过创建扩展TypeReference的内部类,您迫使Java保留您期望myObject类型列表的事实。 请参阅 ...

Spring mvc ajax jackson整合出问题

生成不了bean对象,应该是找不到相应包 。查看是否包可以共享,看是否有相同 类名,并在相同包下面。 json-lib-2.3和jackson-core-asl1.9.1 如果通过json做ajax传递数据,建议使用 json-lib-2.3