当前位置: 首页 > wzjs >正文

东莞 网站建设收费建设网站注意哪几点

东莞 网站建设收费,建设网站注意哪几点,怎么看出网站是dede做的,做字幕的网站Jackson 是一个功能强大的 JSON 处理库,除了基本的序列化和反序列化功能外,它还提供了许多其他功能,以满足不同的需求。以下是一些常用的高级功能: 0.普通序列化反序列化 序列化 import com.fasterxml.jackson.databind.ObjectM…

Jackson 是一个功能强大的 JSON 处理库,除了基本的序列化和反序列化功能外,它还提供了许多其他功能,以满足不同的需求。以下是一些常用的高级功能:

0.普通序列化反序列化

序列化
import com.fasterxml.jackson.databind.ObjectMapper;public class Main {public static void main(String[] args) {try {ObjectMapper objectMapper = new ObjectMapper();User user = new User("Alice", 30);// 将 User 对象序列化为 JSON 字符串String jsonString = objectMapper.writeValueAsString(user);System.out.println(jsonString);} catch (Exception e) {e.printStackTrace();}}
}反序列化import com.fasterxml.jackson.databind.ObjectMapper;public class Main {public static void main(String[] args) {try {ObjectMapper objectMapper = new ObjectMapper();String jsonString = "{\"name\":\"Alice\",\"age\":30}";// 将 JSON 字符串反序列化为 User 对象User user = objectMapper.readValue(jsonString, User.class);System.out.println("Name: " + user.getName());System.out.println("Age: " + user.getAge());} catch (Exception e) {e.printStackTrace();}}
}集合import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;import java.util.List;public class Main {public static void main(String[] args) {try {ObjectMapper objectMapper = new ObjectMapper();String jsonArrayString = "[{\"name\":\"Alice\",\"age\":30},{\"name\":\"Bob\",\"age\":25}]";// 将 JSON 数组反序列化为 List<User>List<User> users = objectMapper.readValue(jsonArrayString, new TypeReference<List<User>>() {});for (User user : users) {System.out.println("Name: " + user.getName() + ", Age: " + user.getAge());}} catch (Exception e) {e.printStackTrace();}}
}

1. 自定义序列化和反序列化

你可以通过实现  `JsonSerializer`  和  `JsonDeserializer`  接口来自定义序列化和反序列化的过程。

#### 自定义序列化示例
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;import java.io.IOException;public class UserSerializer extends JsonSerializer<User> {@Overridepublic void serialize(User user, JsonGenerator jsonGenerator, SerializerProvider serializers) throws IOException {jsonGenerator.writeStartObject();jsonGenerator.writeStringField("fullName", user.getName());jsonGenerator.writeNumberField("yearsOld", user.getAge());jsonGenerator.writeEndObject();}
}
#### 自定义反序列化示例
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;import java.io.IOException;@JsonDeserialize(using = UserDeserializer.class)
public class User {// ... 其他代码 ...// 反序列化public static class UserDeserializer extends JsonDeserializer<User> {@Overridepublic User deserialize(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt) throws IOException {// 自定义反序列化逻辑// 解析 JSON 并返回 User 对象}}
}


 2. 使用注解

Jackson 提供了多种注解,以便更好地控制序列化和反序列化的行为。

-  `@JsonProperty` :指定字段在 JSON 中的名称。
-  `@JsonIgnore` :忽略某个字段。
-  `@JsonInclude` :指定序列化时的包含策略。
-  `@JsonFormat` :指定日期格式。

示例:
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;public class User {@JsonProperty("full_name")private String name;@JsonIgnoreprivate int age;@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")private Date birthDate;// ... 其他代码 ...
}


 3. 处理复杂类型

Jackson 可以处理复杂类型,例如嵌套对象和集合。
public class Group {
    private String groupName;
    private List<User> users;

    // ... 其他代码 ...
}

4. 读取和写入 JSON 文件

Jackson 还可以直接读取和写入 JSON 文件。

#### 写入 JSON 文件
objectMapper.writeValue(new File("user.json"), user);
#### 读取 JSON 文件
User user = objectMapper.readValue(new File("user.json"), User.class);


5. 配置 ObjectMapper

你可以通过配置  `ObjectMapper`  来定制 Jackson 的行为,例如启用或禁用特性、设置默认视图等。

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(SerializationFeature.INDENT_OUTPUT); // 美化输出
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // 


忽略未知属性


6. 处理多态类型

Jackson 支持多态类型的处理,可以使用  `@JsonTypeInfo`  和  `@JsonSubTypes`  注解来处理。

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({@JsonSubTypes.Type(value = Dog.class, name = "dog"),@JsonSubTypes.Type(value = Cat.class, name = "cat")
})
public abstract class Animal {// ...
}

`@JsonTypeInfo`  是 Jackson 提供的一个注解,用于在序列化和反序列化过程中处理多态类型。它的主要作用是告诉 Jackson 如何在 JSON 数据中包含类型信息,以便在反序列化时能够正确地识别和实例化具体的子类。

### 主要功能

1. **指定类型信息的使用方式**:


   -  `use` :指定类型信息的类型,通常使用  `JsonTypeInfo.Id.NAME`  表示使用类名或其他名称作为类型信息。
   -  `include` :指定类型信息在 JSON 中的包含方式。常见的选项包括:
     -  `JsonTypeInfo.As.PROPERTY` :将类型信息作为一个属性包含在 JSON 对象中。
     -  `JsonTypeInfo.As.EXISTING_PROPERTY` :使用一个已经存在的属性作为类型信息。
     -  `JsonTypeInfo.As.WRAPPER_OBJECT` :将类型信息作为一个包装对象。
     -  `JsonTypeInfo.As.WRAPPER_ARRAY` :将类型信息作为一个包装数组。

2. **指定类型信息的属性名称**:


   -  `property` :指定在 JSON 中用作类型信息的属性名称。例如,可以将类型信息放在一个名为  `type`  的字段中。

### 示例以下是一个使用  `@JsonTypeInfo`  的示例:

import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({@JsonSubTypes.Type(value = Dog.class, name = "dog"),@JsonSubTypes.Type(value = Cat.class, name = "cat")
})
public abstract class Animal {public abstract String makeSound();
}public class Dog extends Animal {@Overridepublic String makeSound() {return "Woof!";}
}public class Cat extends Animal {@Overridepublic String makeSound() {return "Meow!";}
}
### 序列化和反序列化在序列化时, `Animal`  的子类会生成包含类型信息的 JSON:
ObjectMapper objectMapper = new ObjectMapper();Animal dog = new Dog();
String jsonDog = objectMapper.writeValueAsString(dog);
System.out.println(jsonDog); // 输出: {"type":"dog"}Animal cat = new Cat();
String jsonCat = objectMapper.writeValueAsString(cat);
System.out.println(jsonCat); // 输出: {"type":"cat"}
在反序列化时,Jackson 会根据  `type`  属性的值来确定使用哪个具体的子类:
String jsonDog = "{\"type\":\"dog\"}";
Animal animal = objectMapper.readValue(jsonDog, Animal.class);
System.out.println(animal.makeSound()); // 输出: Woof!String jsonCat = "{\"type\":\"cat\"}";
animal = objectMapper.readValue(jsonCat, Animal.class);
System.out.println(animal.makeSound()); // 输出: Meow! 

 `@JsonTypeInfo`  注解在处理多态类型时非常有用,它确保在序列化和反序列化过程中能够正确地识别和实例化对象的具体类型。这对于构建复杂的数据模型和处理继承结构的数据非常重要。

总结

Jackson 提供了丰富的功能来处理 JSON 数据,能够满足各种复杂的应用场景。通过自定义序列化、使用注解、处理复杂类型等功能,你可以灵活地控制 JSON 数据的读写行为。如果你有特定的需求或问题,欢迎随时询问!

http://www.dtcms.com/wzjs/597303.html

相关文章:

  • 更合公司网站建设个人网站下载
  • 专门做名片的网站机场建设集团网站
  • vue做的项目网站百度app平台
  • 帮别人做违法网站会判刑吗三亚做网站公司
  • 信丰县建设局网站网站与系统对接图文方案
  • 网站开发工具可视化昆明网站的优化
  • 聊城营销网站建设价格东莞三网合一网站制作
  • 网站开发怎么让别人看到做p2p网站费用
  • jsp网站建设模板烟台网站制作公司在线咨询
  • 新学校网站建设成果房产网站cms
  • 奉化建设局网站广州最新通告
  • 重庆市网上房地产官网电脑优化大师有用吗
  • 支付单页网站模板商业设计说明
  • 呼和浩特电子商务网站建设站内优化包括哪些
  • 做盗版视频网站成本多少电子商务的发展现状和前景趋势
  • 做包装找灵感看什么网站友情链接中有个网站域名过期了会影响
  • 自助建设视频网站codepen wordpress
  • 局门户网站的建设方案宣传册样式
  • 有免费做理化试验的网站吗hao123网站难做吗
  • 制作公司网站用阿里云本人找做钢筋笼的活网站
  • 网站服务器租用价格多少钱一年wordpress架站教程
  • 济源做网站的好公司施工企业qc小组
  • 网站开发需求文档prd模板WordPress快速发布文章
  • wordpress站长之家贵阳58同城做网站公司
  • 网站微商城的建设运营实践和思考网站增加流量
  • 虚拟网站怎么做的搭建电商平台网站
  • 武夷山网站设计网站广告收费标准
  • 最早的做团购的网站网站开发模板系统
  • 青海网站 建设网页传奇国度
  • 东莞凤岗网站制作蜘蛛网站长工作职责