在项目中,需要使用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与对象相互转换的一些详细说明: 1. **Python中的JSON操作**: - `json.dumps()`: 序列化对象到JSON字符串。例如,`json.dumps(obj, ensure_ascii=False)`可以将Python对象转化为JSON字符串,`ensure_...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于前后端交互,而Java作为后端开发的主要语言,常常需要将JSON格式的数据与Java类对象进行相互转换,以便于数据的处理和传输。Jackson库是...
2. JSON对象与C++对象映射:在C++中,我们首先需要定义一个类,其成员变量对应于JSON对象的键值对。例如,如果JSON字符串是`{"name": "John", "age": 30}`,我们可以创建一个如下的C++类: ```cpp struct Person { ...
Json对象与json字符串互相转换处理工具
form数据与json对象的互相转换(完整版) * 将web Form 的数据转化成json字符串 * 将json对象的值解析后填入web Form 在AJAX开发中这是关键技术: 1、将form中的数据利用本工具转换成json格式的字符串,再通过ajax传...
C# json格式转换,Json格式字符串与C#对象相互转换,类库和测试demo 写了一个json与C#对象相互装换的类库,直接调用就行,有测试案例,代码注释非常详细 部分方法: /// 将Json字符串解析为C#中的对象 /// Json格式...
在Java中,我们经常需要将JSON字符串与Java对象进行相互转换,以便于数据的传输和处理。本篇文章将详细探讨这个过程,以及如何使用常见的Java JSON库,如Gson和Jackson,进行JSON与Java对象的转换。 首先,让我们...
本篇文章将详细介绍如何在Android中利用Gson库实现JSON与对象、数组之间的相互转换。 Gson是Google提供的一个Java库,它能够将Java对象转换为JSON字符串,同时也能将JSON数据转换回等效的Java对象。在Android中,...
JSON是一种文本格式,主要由键值对组成,键用双引号包围,值可以是字符串、数字、布尔值、数组、null或者另一个JSON对象。例如: ```json { "name": "John", "age": 30, "city": "New York" } ``` 在这个项目中...
在Java开发中,数据交换和存储经常涉及到对象与JSON字符串之间的转换。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Java提供了多种库来实现对象与...
### JSON与Java对象相互转换详解 #### 一、引言 在现代软件开发尤其是Web应用开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式被广泛使用。它基于JavaScript的一个子集,但独立于语言和...
本文将详细介绍如何使用Java实现JSON字符串与对象数组之间的相互转换。 #### JSON转对象数组 首先来看一个具体的例子,假设我们有以下JSON字符串: ```java String obj = "[{\"MName\":\"aaa\",\"MValue\":\"bbb\...
在JSON到树的转换过程中,JSON对象的每个键值对可以映射为树的一个节点,键作为节点的属性,值作为节点的内容;JSON数组则可以转化为树的子节点集合。 在.NET环境中,我们可以使用Newtonsoft.Json库进行JSON的处理...
json转对象 json转实体 利用阿里巴巴 fastjson 将对象 与json 数据互相转换 http://blog.csdn.net/chenmmo/article/details/70154964
这两个库分别提供了JSON对象和Java对象之间转换的方法。 1. org.json库: - JSONObject:表示JSON对象。 - JSONArray:表示JSON数组。 - JSONParser:用于解析JSON字符串。 - `JSONObject.toString()`:将JSON...
本文将详细介绍如何利用Google Gson库进行JSON字符串与对象之间的相互转换。 首先,我们需要了解Gson的核心概念。Gson库通过`Gson`类来实现JSON与Java对象的转换。当你有一个Java对象并想将其转化为JSON字符串时,...
两者可以互相转换,并有类似的方法进行操作。 - **类型转换**:`JSONObject`的`getXXX`系列方法可以根据字段类型返回对应的Java值,如`getString()`, `getInt()`, `getBoolean()`等。 - **异常处理**:在转换过程中...
总结,Java对JSON的操作主要包括构建JSON对象、将JSON字符串转换为Java对象、将Java对象转换为JSON字符串,以及与Map对象的相互转换。开发者可以根据项目需求选择Gson、Jackson或其他库进行JSON处理。理解并熟练掌握...
这个"Java对象与Json之间的互相转换的jar包"正是提供了这样的功能。 这个jar包可能包含了如Jackson、Gson、Fastjson等流行的Java JSON库,它们各自提供了丰富的API来方便开发者进行对象与JSON的转换。 1. Jackson...