使用Jackson实现对象,json,xml,map的转换

使用Jackson实现对象,json,xml,map的互相转换

包名 版本
jackson-databind 2.12.3
jackson-dataformat-xml 2.12.3

一、pom文件

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.12.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.12.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.12.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>2.12.3</version>
        </dependency>

二、创建实体类

package au.com.koalaclass.pay.paylinx.message.wechatpay;
import au.com.koalaclass.pay.paylinx.message.XmlRequest;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
 * @Author : luzhiyong
 * @CreateTime : 2021/6/1
 * @Description :
@Data
@AllArgsConstructor
@NoArgsConstructor
@JacksonXmlRootElement(localName = "xml")
public class WechatRateXmlRequest {
    @JsonProperty(value = "mch_id")
    @JacksonXmlProperty(localName = "mch_id")
    private String mchId;//商户号
    @JsonProperty(value = "fee_type")
    @JacksonXmlProperty(localName = "fee_type")
    private String feeType;//货币,如AUD

三、对象、json、xml、map的转换

对象转换json使用的是ObjectMapper
对象转换map使用的是XmlMapper
转泛型mapper.readValue(json, new TypeReference<List>() {
});

 @Test
    public void test2() throws JsonProcessingException {
        //创建一个对象
        WechatRateXmlRequest wechatRateXmlRequest = new WechatRateXmlRequest();
        //给对象属性赋值
        wechatRateXmlRequest.setMchId("123456");
        wechatRateXmlRequest.setFeeType("AUD");
        //创建ObjectMapper
        ObjectMapper mapper = new ObjectMapper();
        //对象转成json字符
        String json = mapper.writeValueAsString(wechatRateXmlRequest);
        System.out.println("对象转json"+json);
        //json字符串转对象
        WechatRateXmlRequest xmlRequest = mapper.readValue(json, WechatRateXmlRequest.class);
        System.out.println("json字符串转对象"+xmlRequest.toString());
        //json转map
        Map mp = mapper.readValue(json, Map.class);
        System.out.println("json转map"+mp);
        XmlMapper xmlMapper = new XmlMapper();
        //对象转xml
        String xml = xmlMapper.writeValueAsString(wechatRateXmlRequest);
        System.out.println("对象转xml"+xml);
        //xml转对象
        WechatRateXmlRequest rate = xmlMapper.readValue(xml, WechatRateXmlRequest.class);
        System.out.println("xml转对象"+rate);
        //xml转map
        Map map = xmlMapper.readValue(xml, Map.class);
        System.out.println("xml转map"+map);

四、运行结果

对象转json{"sign":null,"mch_id":"13231952","fee_type":"AUD"}
json字符串转对象WechatRateXmlRequest(mchId=13231952, feeType=AUD)
json转map{sign=null, mch_id=13231952, fee_type=AUD}
对象转xml<xml><sign/><mch_id>13231952</mch_id><fee_type>AUD</fee_type></xml>
xml转对象WechatRateXmlRequest(mchId=13231952, feeType=AUD)
xml转map{sign=, mch_id=13231952, fee_type=AUD}

五。忽略字段

@JsonIgnoreProperties(ignoreUnknown = true)
将这个注解写在类上之后,就会忽略类中不存在的字段

这个注解还可以指定要忽略的字段。使用方法如下:
@JsonIgnoreProperties({ “internalId”, “secretKey” })

六。解决long返回时精度丢失问题

@Configuration
public class JsonConfig {
     * Jackson全局转化long类型为String,解决jackson序列化时long类型缺失精度问题
     * @return Jackson2ObjectMapperBuilderCustomizer 注入的对象
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        return new Jackson2ObjectMapperBuilderCustomizer() {
            @Override
            public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
                jacksonObjectMapperBuilder.serializerByType(Long.TYPE, ToStringSerializer.instance);
                jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance);
                    使用Jackson实现对象,json,xml,map的转换前言一、pom文件二、创建实体类三、对象、json、xml、map的转换四、运行结果前言使用Jackson实现对象,json,xml,map的互相转换使用的包包名版本jackson-databind2.12.3jackson-dataformat-xml2.12.3一、pom文件        &lt;dependency&gt;            &lt;groupId&gt;com.faster
jackson-core:核心包,提供基于"流模式"解析的相关API,包括JsonPaser和JsonGenerator;
jackson-annotations:注解包,提供标准注解功能;
jackson-databind:数据绑定包,提供基于"对象绑定"解析的相关API(ObjectMapper)和"树模型"解析的相关API(JsonNode)。
				
Jackson 库提供了一个 ObjectMapper 类,可以用来实现对象Map<String, Object> 之间的相互转换。 将对象转换Map<String, Object> 的方法如下: ObjectMapper mapper =new ObjectMapper(); Map<String, Object> map = mapper.conve...
@JacksonXmlRootElement(localName = "service") public class XmlService { @JacksonXmlProperty(localName = "SYS_HEAD") private SysHeader sysHeader; @JacksonXmlProperty(localName = "L...
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.7.4</version> </dependency> 记好上面那个版本 这个版本的jackson是有问题的 ObjectMapper的readTree方法 从字符串..
```java import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLMapper; import java.io.File; import java.io.IOException; public class YamlToJsonXmlConverter { public static void main(String[] args) { // 读取YAML文件 File yamlFile = new File("example.yaml"); // 创建ObjectMapper实例 ObjectMapper yamlMapper = new YAMLMapper(); ObjectMapper jsonMapper = new ObjectMapper(); XmlMapper xmlMapper = new XmlMapper(); try { // 将YAML转换JSON Object yamlObject = yamlMapper.readValue(yamlFile, Object.class); String jsonString = jsonMapper.writeValueAsString(yamlObject); System.out.println(jsonString); // 将YAML转换XML String xmlString = xmlMapper.writeValueAsString(yamlObject); System.out.println(xmlString); } catch (IOException e) { e.printStackTrace(); 在本例中,我们使用Jackson库的`YAMLMapper`、`ObjectMapper`和`XmlMapper`类来分别读取YAML文件、将YAML转换JSONXML格式。请注意,我们需要提供一个Java对象类型以告诉Jackson如何解析YAML文件。在本例中,我们使用了`Object.class`,这意味着Jackson将把YAML转换为一个Map对象