Json基础教程
Jackson教程
- Jackson介绍
- Jackson入门程序
- Jackson ObjectMapper实现JSON实际的读/写
- Jackson对象序列化/反系列化
- Jackson数据绑定
- Jackson JSON映射到任何Java对象
- Jackson使用具体的Java对象和类型强制转换到JSON使用
- Jackson树模型JsonNode
- Jackson流式API JsonGenerator、JsonParser
Gson教程
开源项目
知识点
相关文章
更多最近更新
更多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 Databind classpath issue)[2022-06-26]
您似乎是从两个不同的jar文件依赖关系拉同一个类(SerializationConfig)。 从你的问题来看,显然com.fasterxml.jackson.databind中的一个(在堆栈跟踪中引用)可以在jackson-databind-2.7.3.jar或jersey-all-2.18.jar中找到: com/fasterxml/jackson/databind/SerializationConfig.class ./jackson-databind-2.7.3.jar org/codehaus/ja ... -
您可以尝试将Builder.succeeded的类型Builder.succeeded为Object ,然后添加一些代码以便稍后阅读。 这听起来像是未来错误的来源,但如果你不控制API那么它可能是你最好的镜头。 public class Foo { private Object overRiddenJsonType; public Object getOverRiddenJsonType() { return overRiddenJsonTy ...
-
我怀疑问题是由于类型擦除,即代替传递通用参数类型,也许只有actions.getClass()被传递; 这将给出类型相当于List <?>。 如果这是真的,一种可能性是使用中间的子类,如: public class ActionImplList extends ArrayList
{ } 因为即使只有类被传递,这将保留类型信息。 那么那么 public @ResponseBody String executeActions(@RequestBody ActionImplList a ... -
使用类型信息注释您的基类A ,告诉Jackson如何决定给定的json对象是否应该反序列化为B.java或C.java 。 例如:通过下面的代码,我们告诉杰克逊A.class的json对象将包含一个key type的属性,其值可以是“b”或“c”。 如果值为“b”,则将该对象反序列化为B.class ,否则将其反序列C.class @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = ...
-
Jackson数据绑定在IDE环境中工作,但不在jar中(Jackson databind working in IDE environment but not in jar)[2023-01-01]
所以我只是在我的系统中尝试过,并能够模拟这个问题。 为了解决这个问题,你需要添加一个插件maven-shade-plugin ,这是创建胖jar所必需的,也就是说。 具有所有必需依赖性的jar。 更新pom.xml文件,注意这里我已经将包含main方法的类重新命名为Test并放入默认包中: -您可以在@RequestMapping中设置字符编码,如下所示。 @RequestMapping(value = "/ajaxDataTableListUsers", produces = {"application/json; charset=UTF-8"}) You can set character encoding in @RequestMapping like below. @RequestMapping(value = "/ajaxDataTableListUsers", produces = ...使用Jackson数据绑定将嵌套的Json发布到spring控制器(Post nested Json to spring controller using Jackson data binding)[2022-02-25]
将“private TypeDTO type”更改为“private String type”后问题解决了。 Problem resolved after I changed "private TypeDTO type" to "private String type".您可以简单地使用@JsonAnySetter进行反序列化 标记注释,可用于定义非静态双参数方法(属性的第一个参数名称,要设置的第二个值),用作从JSON内容中找到的所有其他无法识别的属性的“回退”处理程序。 和@JsonAnyGetter进行序列化。 标记注释,可用于将非静态,无参数方法或成员字段定义为JsonAnySetter方法的反向; 基本上像getter一样使用但是返回的Map(类型必须是Map )的内容被序列化,好像它们是包含带有此注释的方法/字段的bean的实际属性 public class N ...使用Jackson的REST Web服务JSONObject数据绑定(REST Web Service JSONObject Data Binding Using Jackson)[2022-12-24]
使用org.json.JSONObject而不是将其放在地图中。 JSONObject jObject = null; jObject = new JSONObject(String you want to parse); JSONObject jObject2 =jObject.getJSONObject("txn"); JSONObject jobject3 = jObject2.getJSONObject("TXN_DATE"); String jobject4 = jobject3.getStr ...Java:Jackson数据绑定无法从JSON文件映射整个类(Java: Jackson Data Binding Fails to Map Entire Class from JSON File)[2021-09-21]
再次,就像推文的情况一样,您不会将数据加载到“用户”对象。 代替: user = tweet.new User(); 你应该使用: user = tweet.getUser(); 您还在Tweet类中缺少以下内容: @JsonProperty("user") private User user; public User getUser() { return user; } 我不知道你是如何生成你的Tweets.java文件的,但它似乎并不完整。 考虑使用http://www.jsonschema2po ...