SpringMVC之JSON工具:Jackson Gson 和fastjson通过JSON工具来解决文字乱码和时间格式问题——通过JSON工具生成JSON

什么是Json?

JSON:JavaScript Object Notation+JS对象

它是一种轻量级的数据交换格式JSON(当前是交互的顶流),它自身具有独立的编程格式,它的特点是简洁和清晰,Json的存在大大改造了网络传输的速率。

注意:在js中所支持的任何类型都可以通过Json来表示

Json语法格式

1:由键值对来表示对象

2:各数据之间通过逗号隔开

3:{}大括号内是对象

4:【】括号内是数组

Json与JS之间是什么关系?

学过Java的同学都知道一个方法叫做tostring,JSON与JS的关系,就可以通过这种方法来实现,

JSON就是JS对象的tostring。通过JSON来修改JS的输出内容。

JSON目前最流行的三种处理工具

1:Jackson  (流行)

2:Gson

3:Fastjson  (时常会出现BUG)

使用JSON前,必须先要在项目中导入JSON所使用的依赖在Maven项目的pom.xml文件中进行设置

1:Jackson

<dependency>            
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.14.2</version>
</dependency>

2:Gson

        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.10.1</version>
        </dependency>

3:Fastjson

        <dependency>
            <groupId>com.alibaba/groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.60</version>
        </dependency>

JSON与JS之间相互转换的方法:

1:将JSON对象转化成JS对象

var obj = JSON.parse('{"name": "不想睡醒的梦", "sex": "男"}')

// 结果是:{name: '不想睡醒的梦', sex: '男'}

2:将JS对象转换成JSON

var json = JSON.stringify({name: '不想睡醒的梦', sex: '男'})

//  结果:'{"name": "不想睡醒梦", "sex": "男"}'

通过Jackson来实现字符格式出现乱码的情况

之前的博客有讲过当SpringMVC中出现文字输出内容乱码的情况

在Maven项目中有这样的一串代码

    @RequestMapping("/book3")
    @ResponseBody
    public String demo3(){
        return "不想睡醒的梦🐎";
    }

 1:通过修改参数来将乱码修改成utf-8格式

 @RequestMapping(value = "/book3",produces = "application/json;charset=utf-8")

2:通过Maven项目中的SpringMVC配置文件对JSON代码进行全局文字格式的设置

注意:在配置文件中进行设置,可以一劳永逸不需要在进行其他的配置

    <mvc:annotation-driven >
        <mvc:message-converters register-defaults="true">
            <!--通过json来设置文字格式一劳永逸-->
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8"></constructor-arg>
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">
                    <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                        <property name="failOnEmptyBeans" value="false"></property>
                    </bean>
                </property>
            </bean>
    </mvc:annotation-driven >

输出结果:

文字得到正常的输出,上面是JSON交互的两种方法,除此之外还有很多方法 

通过JSON实现时间格式的正确表达

案例代码:访问后端数据,输出时间

    @RequestMapping(value = "/date")
    @ResponseBody
    public Date data(){
        Date date = new Date();
        return date;
    }

网页输出结果:一串数字

一串数字有一个官方的名称叫做时间戳

时间戳

我们想要的结果是当前的时间但是时间戳只是一串数字,对于我们并没有很大的用处

下来将通过JSON工具将时间戳转化成我们所能够理解的时间格式

一:Jackson

 1:注解@JsonFormat

位置可以方法属性的上面,也可以放在生成的get方法上面

写法一:

    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date publshdata ;

 写法二:

    @JsonFormat(pattern = "yyyy-MM-dd")
    public Date getPublshdata() {
        return publshdata;
    }

输出结果

 2:配置文件解决时间格式(与上面字符的配置文件大同小异)

   <mvc:message-converters>       
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" id="httpMessageConverter">
                <property name="objectMapper">
                    <bean class="com.fasterxml.jackson.databind.ObjectMapper">
                        <property name="dateFormat">
                            <bean class="java.text.SimpleDateFormat">
                                <constructor-arg name="pattern" value="yyyy-MM-dd"></constructor-arg>
                            </bean>
                        </property>
                    </bean>
                </property>
            </bean>
        </mvc:message-converters>

3:通过ObjectMapper来实现时间格式的修改 

@RequestMapping(value = "/date")
    @ResponseBody
    public String data() throws Exception{

        ObjectMapper mapper = new ObjectMapper();

        //关闭时间戳功能
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
        //设置一个时间格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //将上面的时间格式添加到对象中
        mapper.setDateFormat(sdf);
        Date date = new Date();
        //调用writeValueAsString,将指定的对象转换成json内容
        String s = mapper.writeValueAsString(date);
        return s;
    }

二;Gson

注意:当你的maven项目中使用gson时,你需要将Jackson中的依赖删除掉,因为在Spring框架中,框架会优先使用Jackson的依赖,所以会优先加载Jackson依赖中的Httpmessageconvert,然后才会加载gson中的Httpmessageconvert依赖,所以两种交互依赖能同时出现,但是依赖的优先级顺序不同。
 

Maven项目中的配置代码:

<context:component-scan base-package="d1"></context:component-scan>
    <mvc:annotation-driven >
        <mvc:message-converters>
            <ref bean="httpMessageConverter"></ref>
        </mvc:message-converters>
 </mvc:annotation-driven>
    <bean class="org.springframework.http.converter.json.GsonHttpMessageConverter" id="httpMessageConverter">
        <property name="gson">
            <bean class="com.google.gson.Gson" factory-bean="gsonBuilder" factory-method="create"></bean>
        </property>
    </bean>
    <bean class="com.google.gson.GsonBuilder" id="gsonBuilder">
        <property name="dateFormat" value="yyyy-MM-dd"></property>
    </bean>

三:Fastjson

配置文件:

    <mvc:annotation-driven>
        <mvc:message-converters>
            <ref bean="httpMessageConverter"></ref>
        </mvc:message-converters>
    </mvc:annotation-driven>
    <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter" id="httpMessageConverter">
        <property name="fastJsonConfig">
            <bean class="com.alibaba.fastjson.support.config.FastJsonConfig">
                <property name="dateFormat" value="yyyy-MM-dd"></property>
            </bean>
        </property>
    </bean>

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
回答: 当导入json文件时出现文字乱码问题,可能是由于文件的编码格式与解析方式不匹配所导致的。根据引用\[1\]中提到的情况,json串使用的是GBK编码,而cjson库默认是按照UTF-8编码解析的。因此,当遇到非UTF-8编码的字符时,就会出现乱码问题。 要解决这个问题,可以采取以下几种方法: 1. 将json文件的编码格式转换为UTF-8。可以使用文本编辑器或转码工具将文件的编码格式转换为UTF-8,确保文件中的所有字符都能正确解析。 2. 在使用cjson库解析json串时,指定正确的编码格式。可以通过修改cjson库的参数或使用相关的解析函数来指定使用GBK编码进行解析,以保证字符能够正确地转换为LUA本地的数据结构。 3. 在项目中进行全局文字格式的设置。根据引用\[2\]中提到的方法,可以通过修改项目的配置文件来设置全局的文字格式,确保解析json时能够正确处理各种编码格式。 至于为什么会出现"朶"等字的乱码问题,根据引用\[3\]中的解释,cjson库对非UTF-8编码的字符不做任何检查,直接放过。因此,当遇到非UTF-8编码的字符时,就会出现乱码问题。这也说明了为什么使用GBK编码会导致部分字符出现乱码的情况。 综上所述,要解决导入json文件文字乱码问题,可以通过转换文件编码格式、指定正确的解析方式或进行全局文字格式的设置来解决。 #### 引用[.reference_title] - *1* *3* [JSON数据乱码问题](https://blog.csdn.net/weixin_42151036/article/details/113571128)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [SpringMVCJSON工具Jackson Gsonfastjson通过JSON工具解决文字乱码时间格式问题——通过JSON工具...](https://blog.csdn.net/m0_52479012/article/details/129254016)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想睡醒的梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值