JSON

JSON

通过键值对作为前后端传递数据的中间人

前端处理JSON

  • script标签无法单闭合
<script type="text/javascript">
    // Javascript中定义对象
    let user = {
        name : "lct",
        age : 3,
        sex : "男"
    }
    // 将对象转化为JSON字符串
    let json = JSON.stringify(user)
    console.log(json)
    // 将JSON字符串转化为对象
    let obj = JSON.parse(json)
    console.log(obj)
</script>
img

Jackson

依赖:

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

将对象转换为JSON字符串

@Controller
public class JsonController {
    @ResponseBody // 不会走视图解析器, 不去找页面, 直接返回字符串
  	// produces用于解决可能出现的乱码
    @RequestMapping(value = "/t1", produces = {"application/json;charset=utf-8"})
    public String test01() throws JsonProcessingException {
        ObjectMapper om = new ObjectMapper();
        User user = new User("lct", 18, "男");
        return om.writeValueAsString(user);
    }
}

SpringMVC的JSON乱码解决方式

<mvc:annotation-driven>
    <mvc:message-converters register-defaults="true">
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <constructor-arg value="UTF-8"/>
        </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"/>
                </bean>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

ResponseBody替代方法

@RestController // 类下所有方法都不会走视图解析器, 直接返回字符串
public class JsonController {
    @RequestMapping("/t1")
    public String test01() throws JsonProcessingException {
        ObjectMapper om = new ObjectMapper();
        User user = new User("lct", 18, "男");
        return om.writeValueAsString(user);
    }
}

显示日期

方式一

@RequestMapping("/t2")
public String test02() throws JsonProcessingException {
    ObjectMapper om = new ObjectMapper();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    return om.writeValueAsString(sdf.format(new Date()));
}

方式二

@RequestMapping("/t2")
public String test02() throws JsonProcessingException {
    ObjectMapper om = new ObjectMapper();
    om.configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS, false);
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    om.setDateFormat(sdf);
    return om.writeValueAsString(new Date());
}
img

编写一个JSON的时间处理类

JsonUtil.java

public class JsonUtil {
   
   public static String getJson(Object object) {
       return getJson(object,"yyyy-MM-dd HH:mm:ss");
  }

   public static String getJson(Object object,String dateFormat) {
       ObjectMapper mapper = new ObjectMapper();
       //不使用时间差的方式
       mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
       //自定义日期格式对象
       SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
       //指定日期格式
       mapper.setDateFormat(sdf);
       try {
           return mapper.writeValueAsString(object);
      } catch (JsonProcessingException e) {
           e.printStackTrace();
      }
       return null;
  }
}

Fastjson

依赖:

<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.26</version>
</dependency>

测试

@RequestMapping("/t3")
public String test03() {
    User user = new User("lct", 18, "男");
    // Java对象 转 JSON字符串
    String str1 = JSON.toJSONString(user);
    // JSON字符串 转 Java对象
    User u = JSON.parseObject(str1, User.class);
    // Java对象 转 JSON对象
    Object json = JSON.toJSON(user);
    // JSON对象 转 Java对象(方法已废弃)
  	// ...
    return str1 + ", " + u.toString() + ", " + json.toString();
}
posted @ 2023-06-04 18:45  James-Allen  阅读(15)  评论(0)    收藏  举报