`
guyunduzai
  • 浏览: 17411 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论
阅读更多

在项目中,需要使用json字符串,有时候又需要将字符串转换为对象,以前写代码是直接在代码中写,方法如下:

package com.suning.review.admin.job;

import java.util.ArrayList;
import java.util.List;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
public class JsonTest {
    private static Gson gson = new GsonBuilder().enableComplexMapKeySerialization()
            .setDateFormat("yyyy-MM-dd HH:mm:ss").create();

    public static void main(String[] args) {
        People p1 = new People(1, 20, "jack");
        People p2 = new People(2, 21, "tom");
        List<People> peoples = new ArrayList<People>();
        peoples.add(p1);
        peoples.add(p2);
        String p1Str = gson.toJson(p1);
        // {"id":1,"age":20,"name":"jack"}
        String listStr = gson.toJson(peoples);
        // [{"id":1,"age":20,"name":"jack"},{"id":2,"age":21,"name":"tom"}]

        // 将字符串转换为对象
        People people = gson.fromJson(p1Str, People.class);
        List<People> peopleList = gson.fromJson(listStr, new TypeToken<List<People>>() {
        }.getType());
    }
}

 这样写当然是可以的,但是缺点是每一个需要使用到json与对象之间相互转换的类中都要声明Gson gson变量,为了代码的可重用性和设计清晰原则,可以将该json与object类转换抽取出来,独立成一个方法工具类,如下:

package util;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.type.TypeReference;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.gson.JsonParseException;
/**
 * json转换类
 */
public class JsonConvert {
    
    private static final ObjectMapper mpper = new ObjectMapper();
    
    private static final Logger LOGGER = LoggerFactory.getLogger(JsonConvert.class);
    
    /**
     * json 转换为 对象
     * @param json  json串
     * @param cl    类型
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static <T> T jsonToObject(String json, Class<T> cl)
    {
        LOGGER.debug("Enter method jsonToObject");
        
        LOGGER.debug("param=" + json);
        try {
            T obj = mpper.readValue(json.getBytes("UTF-8"), cl);
            
            return obj;
        } catch (JsonParseException e) {
            LOGGER.error("JsonParseException", e);
        } catch (JsonMappingException e) {
            LOGGER.error("JsonMappingException", e);
        } catch (UnsupportedEncodingException e) {
            LOGGER.error("UnsupportedEncodingException", e);
        } catch (IOException e) {
            LOGGER.error("IOException", e);
        }
        LOGGER.debug("Exit method jsonToObject");
        return null;
    }
    
    public static <T> T jsonToObject(String json, TypeReference<T> cl){
        LOGGER.debug("Enter method jsonToObject1");
        LOGGER.debug("param=" + json);
        try {
            T t = mpper.readValue(json, cl);
            return t;
        } catch (Exception e) {
            LOGGER.error("jsonToObject1 occur Exception", e);
        }
        LOGGER.debug("Exit method jsonToObject");
        return null;
    }
    
    /**
     * 对象转换为json    
     * @param obj   需要转换对象
     * @return 转换后的json串
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static String objectoJson(Object obj)
    {
        LOGGER.debug("Enter method objectoJson");
        try {
            return mpper.writeValueAsString(obj);
        } catch (JsonGenerationException e) {
            LOGGER.error("JsonGenerationException", e);
        } catch (JsonMappingException e) {
            LOGGER.error("JsonMappingException", e);
        } catch (IOException e) {
            LOGGER.error("IOException", e);
        }
        LOGGER.debug("Exit method objectoJson");
        return null;
    }
}

 如果使用该工具类,jsonTest可改变如下:

import java.util.ArrayList;
import java.util.List;
import org.codehaus.jackson.type.TypeReference;
import com.suning.review.util.JsonConvert;

public class JsonTest {
    public static void main(String[] args) {
        People p1 = new People(1, 20, "jack");
        People p2 = new People(2, 21, "tom");
        List<People> peoples = new ArrayList<People>();
        peoples.add(p1);
        peoples.add(p2);
        String p1Str = JsonConvert.objectoJson(p1);
        // {"id":1,"age":20,"name":"jack"}
        String listStr = JsonConvert.objectoJson(peoples);
        // [{"id":1,"age":20,"name":"jack"},{"id":2,"age":21,"name":"tom"}]

        // 将字符串转换为对象
        People people = JsonConvert.jsonToObject(p1Str, People.class);
        List<People> peopleList = JsonConvert.jsonToObject(listStr, new TypeReference<List<People>>() {
        });
    }
}

 对象与字符串的相互转换就是使用反射来实现的,具体怎么实现的还得看源码啊

分享到:
评论

相关推荐

    json与对象相互转换系列处理

    以下是对JSON与对象相互转换的一些详细说明: 1. **Python中的JSON操作**: - `json.dumps()`: 序列化对象到JSON字符串。例如,`json.dumps(obj, ensure_ascii=False)`可以将Python对象转化为JSON字符串,`ensure_...

    json格式与java类对象相互转换

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于前后端交互,而Java作为后端开发的主要语言,常常需要将JSON格式的数据与Java类对象进行相互转换,以便于数据的处理和传输。Jackson库是...

    json字符串转换c++类对象

    2. JSON对象与C++对象映射:在C++中,我们首先需要定义一个类,其成员变量对应于JSON对象的键值对。例如,如果JSON字符串是`{"name": "John", "age": 30}`,我们可以创建一个如下的C++类: ```cpp struct Person { ...

    Json对象与json字符串互相转换处理工具

    Json对象与json字符串互相转换处理工具

    form数据与json对象的互相转换(完整版)

    form数据与json对象的互相转换(完整版) * 将web Form 的数据转化成json字符串 * 将json对象的值解析后填入web Form 在AJAX开发中这是关键技术: 1、将form中的数据利用本工具转换成json格式的字符串,再通过ajax传...

    C# json格式解析,Json格式字符串与C#对象相互转换,类库+使用案例,注释详细

    C# json格式转换,Json格式字符串与C#对象相互转换,类库和测试demo 写了一个json与C#对象相互装换的类库,直接调用就行,有测试案例,代码注释非常详细 部分方法: /// 将Json字符串解析为C#中的对象 /// Json格式...

    Json与java对象之间相互转换源码

    在Java中,我们经常需要将JSON字符串与Java对象进行相互转换,以便于数据的传输和处理。本篇文章将详细探讨这个过程,以及如何使用常见的Java JSON库,如Gson和Jackson,进行JSON与Java对象的转换。 首先,让我们...

    安卓 JSON实现对象和数组的相互转换

    本篇文章将详细介绍如何在Android中利用Gson库实现JSON与对象、数组之间的相互转换。 Gson是Google提供的一个Java库,它能够将Java对象转换为JSON字符串,同时也能将JSON数据转换回等效的Java对象。在Android中,...

    纯javascript实现json与对象的互相转换项目

    JSON是一种文本格式,主要由键值对组成,键用双引号包围,值可以是字符串、数字、布尔值、数组、null或者另一个JSON对象。例如: ```json { "name": "John", "age": 30, "city": "New York" } ``` 在这个项目中...

    java 对象与json字符串互相转换工具类

    在Java开发中,数据交换和存储经常涉及到对象与JSON字符串之间的转换。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Java提供了多种库来实现对象与...

    json和对象相互转换

    ### JSON与Java对象相互转换详解 #### 一、引言 在现代软件开发尤其是Web应用开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式被广泛使用。它基于JavaScript的一个子集,但独立于语言和...

    json转对象数组与对象数组转json --Java

    本文将详细介绍如何使用Java实现JSON字符串与对象数组之间的相互转换。 #### JSON转对象数组 首先来看一个具体的例子,假设我们有以下JSON字符串: ```java String obj = "[{\"MName\":\"aaa\",\"MValue\":\"bbb\...

    json与树的相互转换

    在JSON到树的转换过程中,JSON对象的每个键值对可以映射为树的一个节点,键作为节点的属性,值作为节点的内容;JSON数组则可以转化为树的子节点集合。 在.NET环境中,我们可以使用Newtonsoft.Json库进行JSON的处理...

    json 转对象 转实体类,Java fastjson

    json转对象 json转实体 利用阿里巴巴 fastjson 将对象 与json 数据互相转换 http://blog.csdn.net/chenmmo/article/details/70154964

    JSON与Java互相转换Demo(Eclipse)

    这两个库分别提供了JSON对象和Java对象之间转换的方法。 1. org.json库: - JSONObject:表示JSON对象。 - JSONArray:表示JSON数组。 - JSONParser:用于解析JSON字符串。 - `JSONObject.toString()`:将JSON...

    利用Google Gson实现JSON字符串和对象之间相互转换

    本文将详细介绍如何利用Google Gson库进行JSON字符串与对象之间的相互转换。 首先,我们需要了解Gson的核心概念。Gson库通过`Gson`类来实现JSON与Java对象的转换。当你有一个Java对象并想将其转化为JSON字符串时,...

    用于java对象与json对象间的相互转换(net.sf.json.JSONObject)

    两者可以互相转换,并有类似的方法进行操作。 - **类型转换**:`JSONObject`的`getXXX`系列方法可以根据字段类型返回对应的Java值,如`getString()`, `getInt()`, `getBoolean()`等。 - **异常处理**:在转换过程中...

    Java对Json的一系列操作(构建、json与对象的转换)

    总结,Java对JSON的操作主要包括构建JSON对象、将JSON字符串转换为Java对象、将Java对象转换为JSON字符串,以及与Map对象的相互转换。开发者可以根据项目需求选择Gson、Jackson或其他库进行JSON处理。理解并熟练掌握...

    Java对象与Json之间的互相转换的jar包

    这个"Java对象与Json之间的互相转换的jar包"正是提供了这样的功能。 这个jar包可能包含了如Jackson、Gson、Fastjson等流行的Java JSON库,它们各自提供了丰富的API来方便开发者进行对象与JSON的转换。 1. Jackson...

Global site tag (gtag.js) - Google Analytics