• json


    Json

    1.简介

    json(JavaScript Object Notation, JS对象标记) 是一种轻量级数据交换格式,目前使用非常广泛,json本质就是一个字符串

    json键值对 是用来保存jsvaScript对象的一种方式,和javaScript对象的写法也大同小异 ,例如: {"name": "zpk"}

    2. json和javaScript的区别

    json是javaScript对象的字符串表示法,它使用文本表示一个JS对象的信息,本质是一个字符串.

     // 这是一个javascript对象,注意建名也可以使用引号包裹
     var obj = {
         a: 'hello',
         b: 'word'
     };
     // 这是一个json字符串,本质是一个字符串
     var json = '{
      "a": "hello",
         "b": "word"
     }'
     
     var obj = {a: 'Hello', b: 'World'}; //这是一个对象,注意键名也是可以使用引号包裹的
     var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质是一个字符串

    3. json和javascript对象互转

    • json转为javascript

     var obj = Json.parse(json字符串);
     //例如:
     var obj = Json.parse('{"a": "Hello", "b": "World"}');
    • javascript对象转为json

     var json = JSON.stringify(javaScript对象)
     //例如
     var json = JSON.stringify({a: 'hello',b: 'word'});

    4. json依赖,可以在mvc中使用controller返回json数据

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

    5. 编写controller测试

    • 这里我们需要两个新东西,一个是@ResponseBody,一个是ObjectMapper对象,我们看下具体的用法

     @Controller
     public class UserController {
     
         @RequestMapping("/json1")
         @ResponseBody
         public String json1() throws JsonProcessingException {
             //创建一个jackson的对象映射器,用来解析数据
             ObjectMapper mapper = new ObjectMapper();
             //创建一个对象
             User user = new User("秦疆1号", 3, "男");
             //将我们的对象解析成为json格式
             String str = mapper.writeValueAsString(user);
             //由于@ResponseBody注解,这里会将str转成json格式返回;十分方便
             return str;
        }
     
     }
    • 中文乱码解决

     //produces:指定响应体返回类型和编码
     @RequestMapping(value = "/json1",produces = "application/json;charset=utf-8")

    6.乱码统一解决

    • spring-mvc.xml配置文件中进行配置(消息StringHttpMessageConverter转换配置)

     <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>

    7.如果这个controller统一是返回json数据,可以进行统一设置

    在类上直接使用@RestController注解,就不用在每一个方法上都添加@ResponseBody了,在前后端分离开发中经常使用这种方法

     @RestController
     public class UserController {
     
         //produces:指定响应体返回类型和编码
         @RequestMapping(value = "/json1")
         public String json1() throws JsonProcessingException {
             //创建一个jackson的对象映射器,用来解析数据
             ObjectMapper mapper = new ObjectMapper();
             //创建一个对象
             User user = new User("秦疆1号", 3, "男");
             //将我们的对象解析成为json格式
             String str = mapper.writeValueAsString(user);
             //由于@ResponseBody注解,这里会将str转成json格式返回;十分方便
             return str;
        }
     
     }

    8. 测试集合的输出

    @RequestMapping("/json2")
    public String json2() throws JsonProcessingException {
    
        //创建一个jackson的对象映射器,用来解析数据
        ObjectMapper mapper = new ObjectMapper();
        //创建一个对象
        User user1 = new User("秦疆1号", 3, "男");
        User user2 = new User("秦疆2号", 3, "男");
        User user3 = new User("秦疆3号", 3, "男");
        User user4 = new User("秦疆4号", 3, "男");
        List<User> list = new ArrayList<User>();
        list.add(user1);
        list.add(user2);
        list.add(user3);
        list.add(user4);
    
        //将我们的对象解析成为json格式
        String str = mapper.writeValueAsString(list);
        return str;
    }
    

    9. 输出时间对象

    @RequestMapping("/json3")
    public String json3() throws JsonProcessingException {
    
        ObjectMapper mapper = new ObjectMapper();
    
        //创建时间一个对象,java.util.Date
        Date date = new Date();
        //将我们的对象解析成为json格式
        String str = mapper.writeValueAsString(date);
        return str;
    }
    
    • 输出结果为1970年1月1号到现在的毫秒数

    • Jackson 默认是会把时间转成timestamps形式

    解决方案: 取消timestamps形式 , 自定义时间格式

    @RequestMapping("/json4")
    public String json4() throws JsonProcessingException {
    
        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();
        String str = mapper.writeValueAsString(date);
    
        return str;
    }
    
    • 结果正常

    抽取为工具类

    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.SerializationFeature;
    
    import java.text.SimpleDateFormat;
    
    public class JsonUtils {
        
        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;
        }
    }
    

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    HDU 5115 Dire Wolf (区间DP)
    HDU 4283 You Are the One(区间DP(最优出栈顺序))
    ZOJ 3469 Food Delivery(区间DP好题)
    LightOJ 1422 Halloween Costumes(区间DP)
    POJ 1651 Multiplication Puzzle(区间DP)
    NYOJ 石子合并(一)(区间DP)
    POJ 2955 Brackets(括号匹配一)
    POJ 1141 Brackets Sequence(括号匹配二)
    ZOJ 3537 Cake(凸包+区间DP)
    Graham求凸包模板
  • 原文地址:https://www.cnblogs.com/liqbk/p/12774024.html
Copyright © 2020-2023  润新知