Jackson数据绑定

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

全屏

数据绑定API用于JSON转换和使用属性访问或使用注解POJO(普通Java对象)。以下是它的两个类型。

  • 简单数据绑定 - 转换JSON,从Java Maps, Lists, Strings, Numbers, Booleans 和 null 对象。

  • 完整数据绑定 - 转换JSON到任何JAVA类型。我们将在下一章分别绑定。

ObjectMapper读/写JSON两种类型的数据绑定。数据绑定是最方便的方式是类似XML的JAXB解析器。

简单的数据绑定

简单的数据绑定是指JSON映射到Java核心数据类型。下表列出了JSON类型和Java类型之间的关系。

Sr. No. JSON 类型 Java 类型
1 object LinkedHashMap<String,Object>
2 array ArrayList<Object>
3 string String
4 complete number Integer, Long or BigInteger
5 fractional number Double / BigDecimal
6 true | false Boolean
7 null null

让我们来看看简单的数据操作绑定。在这里,我们将映射JAVA基本类型直接JSON,反之亦然。

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

File: JacksonTester.java

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

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 {
            ObjectMapper mapper = new ObjectMapper();

            Map<String,Object> studentDataMap = new HashMap<String,Object>(); 
            int[] marks = {1,2,3};

            Student student = new Student();
            student.setAge(10);
            student.setName("Mahesh");
            // JAVA Object
            studentDataMap.put("student", student);
            // JAVA String
            studentDataMap.put("name", "Mahesh Kumar");   		
            // JAVA Boolean
            studentDataMap.put("verified", Boolean.FALSE);
            // Array
            studentDataMap.put("marks", marks);

            mapper.writeValue(new File("student.json"), studentDataMap);
            //result student.json
			//{ 
            //   "student":{"name":"Mahesh","age":10},
            //   "marks":[1,2,3],
            //   "verified":false,
            //   "name":"Mahesh Kumar"
            //}
            studentDataMap = mapper.readValue(new File("student.json"), Map.class);

            System.out.println(studentDataMap.get("student"));
            System.out.println(studentDataMap.get("name"));
            System.out.println(studentDataMap.get("verified"));
            System.out.println(studentDataMap.get("marks"));
      } 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

验证输出结果

{name=Mahesh, age=10}
Mahesh Kumar
false
[1, 2, 3]


相关问答

更多

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进行 ...

什么是在Android中使用rest api和解析数据,jackson或groovy的最佳方法?(what is the best way to use rest api and parse data, jackson or groovy in android?)

根据我的经验,有两个图书馆GSON或杰克逊 您可以认为特定库是最好的,无论是在实现性能,代码优化还是优化UI等方面。 在减少代码行方面,两个库都很好,我的意思是你可以使用这些库中的任何一个来减少样板代码。 在性能方面,杰克逊提供了更好的性能并且快速解析,一位绅士已经对JSON解析器进行了比较,请检查它! From my experience at it comes two library GSON or Jackson It’s upto you how you consider particul ...

WPF数据绑定 - 数据绑定的完整解释(WPF data binding - good FULL explanation of data binding)

MSDN的数据绑定概述页面实际上涵盖了WPF数据绑定的各个方面。 当然,您必须按照链接了解更多详细信息,但每个主题都至少在单个页面上提及(具有指向更多细节的链接)。 它包括关于机制,基本概念,转换,验证,模板和调试的细节。 MSDN's Data Binding Overview page really covers just about every aspect of WPF's data binding. Granted, you'll have to follow links for mor ...

在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 ...

Jackson将Joda DateTime自动格式化为ISO 8601格式(Jackson automatic formatting of Joda DateTime to ISO 8601 format)

我能够从杰克逊用户邮件列表中获得这个答案,并且希望与您分享,因为这是一个新手问题。 从阅读Jackson Date FAQ,我没有意识到需要额外的依赖和注册,但情况就是如此。 它在git hub项目页面记录在这里https://github.com/FasterXML/jackson-datatype-joda 实质上,我不得不将另一个依赖关系添加到特定于Joda数据类型的Jackson jar中,然后我必须在对象映射器上注册该模块的用法。 代码片段如下。 对于我的Jackson Joda数据类型 ...