Gson序列化的对象包含json格式的子属性,json串被转义

2024-05-10 19:38

本文主要是介绍Gson序列化的对象包含json格式的子属性,json串被转义,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如题,当Gson序列化的Java对象中包含一个jsonStr的字段存储的事json格式的字符串,比如数据库中本身存储的就是json格式的varchar jsonStr=
{"name":"chulainn","age":20,"interest":"霹雳布袋戏"}
Gson序列化后就变成
{\"name\":\"chulainn\",\"age\":20,\"interest\":\"霹雳布袋戏\"}
 返回到前端。解决这种现象有多中方式
Gson没有Jackson的 @JsonRawValue 注解。 JsonRawValue:无转换的将属性值写入到json 字符串中。如果使用Jackson在jsonstr字段上直接加上注解就可以了。
    1.使用Java原型的方式

        需要新建一个对象包含 name,age,interest这些属性,把jsonstr字段反序列化为对象 然后再把整个对象序列化为json字符串

   2 .自定义一个JsonSerializer对象 注册到Gson的TypeAdapter中

public class CallResult{private String name;private int age;private String jsonStr;get() set()...
}
class CustomParserFoo implementsJsonSerializer<CallResult>{@Overridepublic JsonElement serialize(CallResult src,Type typeOfSrc,JsonSerializationContext context){JsonObject element = new JsonObject();JsonElement cachedArray = new JsonParser().parse(src.getJsonStr());element.add("jsonStr", cachedArray);element.addProperty("name",src.getName());element.addProperty("age",src.getAge());//element.addProperty();System.out.println(CallResult.class.getDeclaredFields().length);try {int fieldLength = CallResult.class.getDeclaredFields().length;Field[] fields = CallResult.class.getDeclaredFields();for(int i = 0; i < fieldLength; i ++){
//                    Field field = fields[i];
//                    PropertyDescriptor pd = new PropertyDescriptor(field.getName(), src.getClass());
//                    Method rM = pd.getReadMethod();//获得读方法
//                    String name = rM.getAnnotatedReturnType().getType().getTypeName();
//                    System.out.println("name:" + name);//element.addProperty(field.getName(),);}}catch (Exception e){e.printStackTrace();}return element;}}

可以使用反射来赋值  这只是测试直接写死需要序列化的字段,使用反射需要给转化的字段加注解还得判断get方法返回类型...

创建Gson

Gson gson = new GsonBuilder().registerTypeAdapter(CallResult.class,new CustomParserFoo()).create();
CallResult been = new CallResult();
been.setName("tony")
been.setAge(20);
been.setJsonStr("{\"name\":\"chulainn\",\"age\":20,\"interest\":\"霹雳布袋戏\"}")
String result = gson.toJson(bean)
System.out.println(result)
打印结果      {"jsonStr":{"name":"chulainn","age":20,"interest":"霹雳布袋戏"},"name":"tony","age":20}  

只有当转化的类是CallResult才会走自定义的转化


这篇关于Gson序列化的对象包含json格式的子属性,json串被转义的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/977370

相关文章

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.

Java反射实现多属性去重与分组功能

《Java反射实现多属性去重与分组功能》在Java开发中,​​List是一种非常常用的数据结构,通常我们会遇到这样的问题:如何处理​​List​​​中的相同字段?无论是去重还是分组,合理的操作可以提高... 目录一、开发环境与基础组件准备1.环境配置:2. 代码结构说明:二、基础反射工具:BeanUtils

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co