`

fastjson和jackson JSON转换实践

阅读更多

        在实际开发过程,需将请求第三方返回的JSON串转成JAVA对象,用fastjson发现,如果JAVA对象中缺少JSON串的key,将不能正常转换,将会报报Exception in thread "main" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "amount"之类的异常。当然可以补全JAVA对象中属性,但毕竟是第三方返回的JSON串,以后第三方如果再增加新的key那也必须同时修改我们的JAVA对象,就强依赖了。于是用jackson工具,发现无此问题。

        下面是测试验证的完整代码:

UserDTO.java

package com.bijian.test;

public class UserDTO {

    private String name;
    private int age;
    private String city;
    private String grade;
    
    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 getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getGrade() {
        return grade;
    }
    public void setGrade(String grade) {
        this.grade = grade;
    }
    
    @Override
    public String toString() {
        return "UserDTO [name=" + name + ", age=" + age + ", city=" + city + ", grade=" + grade + "]";
    }
}

JacksonUtil.java

package com.bijian.test;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * json字符与对像转换
 */
public final class JacksonUtil {

    public static ObjectMapper objectMapper;

    /**
     * 使用泛型方法,把json字符串转换为相应的JavaBean对象。
     * (1)转换为普通JavaBean:readValue(json,Student.class)
     * (2)转换为List,如List<Student>,将第二个参数传递为Student
     * [].class.然后使用Arrays.asList();方法把得到的数组转换为特定类型的List
     * 
     * @param jsonStr
     * @param valueType
     * @return
     * @throws Exception 
     */
    public static <T> T readValue(String jsonStr, Class<T> valueType) throws Exception {
        
        if (objectMapper == null) {
            objectMapper = new ObjectMapper();
        }

        try {
            return objectMapper.readValue(jsonStr, valueType);
        } catch (Exception e) {
            throw e;
        }
    }

    /**
     * json数组转List
     * @param jsonStr
     * @param valueTypeRef
     * @return
     * @throws Exception 
     */
    public static <T> T readValue(String jsonStr, TypeReference<T> valueTypeRef) throws Exception {
        if (objectMapper == null) {
            objectMapper = new ObjectMapper();
        }

        try {
            return objectMapper.readValue(jsonStr, valueTypeRef);
        } catch (Exception e) {
            throw e;
        }
    }

    /**
     * 把JavaBean转换为json字符串
     * 
     * @param object
     * @return
     * @throws Exception 
     */
    public static String toJson(Object object) throws Exception {
        
        if (objectMapper == null) {
            objectMapper = new ObjectMapper();
        }

        try {
            return objectMapper.writeValueAsString(object);
        } catch (Exception e) {
            throw e;
        }
    }
    
    public static void main(String[] args) throws Exception {
        
        //报Exception in thread "main" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "amount"异常
        String str = "{\"name\":\"白白\",\"age\":18,\"city\":\"shengzhen\",\"amount\":100,\"total\":\"172cm\"}";
        
        //OK
        //String str = "{\"name\":\"白白\",\"age\":18,\"city\":\"shengzhen\"}";
        UserDTO userDTO = JacksonUtil.readValue(str, UserDTO.class);
        System.out.println(userDTO);
    }
}

FastJsonUtil.java

package com.bijian.test;

import java.util.Map;
import java.util.Map.Entry;

import com.alibaba.fastjson.JSON;

public class FastJsonUtil {

    /**
     * 把json字符串转换为map
     * 
     * @param jsonStr
     * @return
     */
    public static Map<String, Object> json2Map(String jsonStr) {

        Map<String, Object> resMap = (Map<String, Object>) JSON.parse(jsonStr);
        return resMap;
    }
    
    /**
     * 把json字符串转换为相应的JavaBean对象
     * 
     * @param jsonStr
     * @param valueType
     * @return
     */
    public static <T> T toObject(String jsonStr, Class<T> valueType) {
        
        return JSON.parseObject(jsonStr, valueType);
    }
    
    /**
    * 把JavaBean转换为json字符串
    * 
    * @param object
    * @return
    * @throws Exception 
    */
    public static String toJson(Object object) {

        return JSON.toJSONString(object);
    }
    
    public static void main(String[] args) throws Exception {
        
        String str = "{\"name\":\"白白\",\"age\":18,\"city\":\"shengzhen\",\"amount\":100,\"total\":\"172cm\"}";
        UserDTO userDTO = FastJsonUtil.toObject(str, UserDTO.class);
        System.out.println(userDTO);
        
        
        Map<String, Object> resMap = FastJsonUtil.json2Map(str);
        for(Entry<String, Object> entry : resMap.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
    }
}
分享到:
评论

相关推荐

    Java四大json库gson+fastjson+jackson+json-lib

    为了方便地处理JSON数据,Java社区提供了多个优秀的JSON库,包括Gson、Fastjson、Jackson和json-lib。这四大JSON库各有特点,适应不同的使用场景。 1. Gson: Gson是Google提供的一个开源库,它能够将Java对象转换...

    fastjson和jackson资源jar包

    在Java开发中,处理JSON数据通常需要依赖第三方库,如Fastjson和Jackson。这两个库都提供了高效的JSON解析和序列化功能,但在实现方式和特性上有所区别。 1. Fastjson: - Fastjson是阿里巴巴开源的一个高性能的...

    JSON中fastjson、jackson、gson如何选择.docx

    JSON 中 fastjson、jackson、gson 的选择和比较 JSON 是一种轻量级的数据交换格式,广泛应用于数据的通信传输中,especially 在前后端的交互中。 Java 中有多种 JSON 解析方式,例如 fastjson(阿里)、Gson(谷歌...

    fastjson与jackson的性能比较

    fastjson和jackson是Java领域中两个广泛使用的JSON库,它们都提供了高效的性能和丰富的功能。这篇博客文章“fastjson与jackson的性能比较”探讨了这两个库在速度和效率方面的差异。 首先,fastjson是阿里巴巴开发的...

    fastjson、gson、jackson序列化和反序列化所用 json

    在Java世界里,为了方便地处理JSON数据,有三个主流的库被广泛应用,即Fastjson、Gson和Jackson。这些库提供了JSON的序列化和反序列化功能,将Java对象转换为JSON字符串,以及将JSON字符串转换回Java对象。 1. **...

    例举fastJson和jackson转json的区别

    在Java开发中,将对象转换为JSON格式是一个常见的任务,FastJson和Jackson是两个非常流行的JSON库。它们都提供了高效且便捷的API用于JSON序列化和反序列化,但它们在处理方式上存在一些差异。以下是对FastJson和...

    gson,fastjson,jackson简单使用

    在Java开发中,有三个流行的JSON库:Gson、Fastjson和Jackson,它们提供了方便快捷的方式来序列化和反序列化Java对象为JSON字符串。 **Gson库** Gson是由Google开发的库,它的主要功能是将Java对象转换为JSON字符...

    jackson json 转 map 数值科学计数法的问题解决.docx

    Jackson JSON 转 Map 之科学计数法问题解决方案 Jackson 是一个流行的 ...通过启用 USE_BIG_DECIMAL_FOR_FLOATS 选项,我们可以解决 Jackson 将 JSON 转换为 Map 时的科学计数法的问题,从而确保数据的精度和正确性。

    java操作json-fastjson和jackson,序列化和反序列化,骚操作一个个的

    配套博客 将JSON数据转换成JAVA的实体类

    Android中FastJson解析json

    在Android应用开发中,JSON(JavaScript Object Notation)...在Android_Jsonfast这个压缩包文件中,可能包含了关于如何在Android项目中集成和使用FastJson的示例代码,你可以进一步学习和实践,加深对FastJson的理解。

    fastJson用于格式的转换

    它提供了灵活的JSON转换方式,支持各种数据结构,并且允许用户自定义转换规则,以满足不同场景的需求。无论是在服务器端处理请求响应,还是在Android应用中进行数据存储和传输,FastJson都是一个值得信赖的选择。

    com.alibaba.fastjson json解析工具包

    它的解析速度和序列化速度都超过了其他许多流行的JSON库,如Jackson和Gson,这使得它在高并发、大数据量的环境中尤为适用。 在使用`fastjson-1.2.73`版本时,开发者可以利用其提供的API进行JSON操作。例如,解析...

    json转换fastjson1.7.2jar

    - Fastjson支持自动类型转换,如日期、自定义类等,可以方便地在JSON和Java类型之间进行转换。 - 对于日期,可以使用`@JSONField(format="yyyy-MM-dd HH:mm:ss")`注解来指定日期格式。 3. **映射与解析:** - `...

    fastjson解析json

    3. **过滤和转换**:Fastjson可以对JSON数据进行过滤和转换,例如只保留某些字段或转换字段类型。 4. **序列化配置**:通过`SerializerFeature`和`ParserFeature`,可以定制序列化和反序列化的行为,如忽略空值、...

    fastjson + gson + jsonlib + jacksonjar包

    Json-lib还支持将JavaBean、Map、Collection和数组转换为JSON格式,以及将JSON转换回这些对象。 4. Jackson: Jackson是另一个流行的Java JSON库,由 FasterXML 维护。Jackson 提供了多种方式来处理JSON,包括流式...

    阿里巴巴json解析 fastjson.jar

    4. JSON到Map转换:对于不关心具体对象结构的场景,Fastjson可将JSON转换为Map,便于灵活处理数据。 5. JSONPath支持:Fastjson提供了JSONPath表达式,允许开发者通过类似XPath的方式查询JSON数据,增强了对JSON...

    fastjson-1.1.33.jar json所使用的jar包

    1. **高性能**:Fastjson采用了独特的解析和生成算法,使得在处理大量JSON数据时,性能显著优于其他同类库,如Jackson和Gson。 2. **易用性**:Fastjson提供了一系列简洁的API,使得开发者可以轻松地将JSON字符串与...

    json处理总结.docx

    JSON处理的基本概念包括JSON数据的读取和写入、JSON数据的解析和生成、JSON数据的转换和处理。JSON数据的读取和写入是指从文件或网络中读取JSON数据或将JSON数据写入文件或网络。JSON数据的解析和生成是指将JSON数据...

    java json转换相关jar包

    为了在Java中处理JSON,我们需要引入特定的库,这里提到的是六个与JSON转换相关的Java jar包。这些jar包提供了将Java对象转化为JSON字符串,以及将JSON字符串解析为Java对象的功能。 1. **org.json**:这是最基础的...

    andriod之json转换工具jar包

    使用Jackson进行JSON转换有以下几个主要步骤: 1. **配置和初始化**:在Android项目中,首先需要将这两个jar包添加到项目的依赖库中,这可以通过在build.gradle文件中添加依赖或者直接将jar包复制到项目的libs目录...

Global site tag (gtag.js) - Google Analytics