Json字符串与Object、List、Map的互转工具类

作者:执笔记忆的空白 时间:2023-04-30 16:08:16 


package com.cq2022.zago.base.util;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringWriter;
import java.util.List;
import java.util.Map;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import com.alibaba.fastjson.JSONArray;
/**
* Json工具类,实现JSON与Java Bean的互相转换
*/
public class JsonUtils {
private static ObjectMapper objectMapper = new ObjectMapper();
private static JsonFactory jsonFactory = new JsonFactory();
static {
objectMapper.configure(SerializationConfig.Feature.WRITE_NULL_MAP_VALUES, false);
objectMapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
}
/**
* 泛型返回,json字符串转对象
* @param jsonAsString
* @param pojoClass
* @return
* @throws JsonMappingException
* @throws JsonParseException
* @throws IOException
*/
public static <T> T fromJson(String jsonAsString, Class<T> pojoClass) throws JsonMappingException,
 JsonParseException, IOException {
return objectMapper.readValue(jsonAsString, pojoClass);
}
public static <T> T fromJson(FileReader fr, Class<T> pojoClass) throws JsonParseException, IOException {
return objectMapper.readValue(fr, pojoClass);
}
/**
* Object对象转json
* @param pojo
* @return
* @throws JsonMappingException
* @throws JsonGenerationException
* @throws IOException
*/
public static String toJson(Object pojo) throws JsonMappingException, JsonGenerationException, IOException {
return toJson(pojo, false);
}
public static String toJson(Object pojo, boolean prettyPrint) throws JsonMappingException, JsonGenerationException,
 IOException {
StringWriter sw = new StringWriter();
JsonGenerator jg = jsonFactory.createJsonGenerator(sw);
if (prettyPrint) {
 jg.useDefaultPrettyPrinter();
}
objectMapper.writeValue(jg, pojo);
return sw.toString();
}
public static void toJson(Object pojo, FileWriter fw, boolean prettyPrint) throws JsonMappingException,
 JsonGenerationException, IOException {
JsonGenerator jg = jsonFactory.createJsonGenerator(fw);
if (prettyPrint) {
 jg.useDefaultPrettyPrinter();
}
objectMapper.writeValue(jg, pojo);
}
/**
* json字符串转Map
* @param jsonStr
* @return
* @throws IOException
*/
public static Map<String, Object> parseMap(String jsonStr) throws IOException {
Map<String, Object> map = objectMapper.readValue(jsonStr, Map.class);
return map;
}
public static JsonNode parse(String jsonStr) throws IOException {
JsonNode node = null;
node = objectMapper.readTree(jsonStr);
return node;
}
public static ObjectMapper getObjectMapper() {
return objectMapper;
}
/**
* json字符串转 List对象
* @param str json字符串
* @param clazz 转换的类型
* @return
*/
public static <T> List<T> fromListJson(String str,Class<T> clazz){
return JSONArray.parseArray(str, clazz);
}
}

来源:https://blog.csdn.net/moneyshi/article/details/44852343

标签:json,map,list,字符串,互转,工具类
0
投稿

猜你喜欢

  • Java thrift服务器和客户端创建实例代码

    2022-01-23 04:38:29
  • 基于Java Springboot + Vue + MyBatis实现音乐播放系统

    2023-07-09 16:01:41
  • Java对世界不同时区timezone之间时间转换的处理方法

    2023-11-08 13:19:30
  • C#使用RabbitMq队列(Sample,Work,Fanout,Direct等模式的简单使用)

    2023-12-06 10:45:34
  • Android nativePollOnce函数解析

    2022-05-29 01:51:26
  • AndroidStudio简单实现BMI计算

    2022-11-24 03:14:50
  • Java 方法(方法的定义,可变参数,参数的传递问题,方法重载,方法签名)

    2021-07-29 20:17:19
  • springboot中request和response的加解密实现代码

    2023-05-27 16:46:27
  • Java Runtime的使用详解

    2021-10-23 06:46:39
  • java中LinkedBlockingQueue与ArrayBlockingQueue的异同

    2023-08-19 02:56:49
  • Android定时器和Handler用法实例分析

    2022-11-09 22:18:08
  • Android CoordinatorLayout高级用法之自定义Behavior

    2022-03-20 05:47:51
  • Android利用RecyclerView实现列表倒计时效果

    2023-09-04 05:29:27
  • SpringData JPA中@OneToMany和@ManyToOne的用法详解

    2021-10-01 00:49:10
  • Java ArrayList与LinkedList使用方法详解

    2023-08-12 08:23:46
  • 解决线程池中ThreadGroup的坑

    2023-08-24 00:13:47
  • Android实现歌词滚动效果

    2023-11-08 04:29:54
  • Android解析XML文件升级APK的方法

    2022-06-05 20:47:26
  • Kotlin 匿名类实现接口和抽象类的区别详解

    2021-09-04 07:14:58
  • java String的intern方法

    2021-07-05 03:23:52
  • asp之家 软件编程 m.aspxhome.com