JSON的相关转换

1. JavaScript 与JSON的转换

1.JavaScript 对象--->JSON字符串

var json = JSON.stringify({a: 'Hello', b: 'Tony'});
//结果是 '{"a": "Hello", "b": "Tony"}'

2.JSON字符串 --->JavaScript 对象

var obj = JSON.parse('{"a": "Hello", "b": "Tony"}');
//结果是 {a: 'Hello', b: 'Tony'}

2. 使用Controller返回json字符串

返回一个json

2.1 导入依赖

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

2.2 使用 最多

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

1. 出现了乱码问题,我们需要设置一下他的编码格式为utf-8,以及它返回的类型

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

或者 在springmvc 配置文件上做文章

<mvc:annotation-driven>
<!-  json  格式化乱码解决手段 -- >
  <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>

4. 时间

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

使用:

@RequestMapping("/json5")
public String json5() throws JsonProcessingException {
   Date date = new Date();
   String json = JsonUtils.getJson(date);
   return json;
}

5. fastjson的使用

0. 相关方法

  • JSONObject 代表 json 对象
  • JSONArray 代表 json 对象数组**
  • JSON代表 JSONObject和JSONArray的转化

1. 导入依赖

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

2. 使用

public class FastJsonDemo {
   public static void main(String[] args) {
       //创建一个对象
       User user1 = new User("张三", 3, "男");
       User user2 = new User("张三", 3, "男");
       User user3 = new User("张三", 3, "男");
       User user4 = new User("张三", 3, "男");
       List<User> list = new ArrayList<User>();
       list.add(user1);
       list.add(user2);
       list.add(user3);
       list.add(user4);

       System.out.println("*******Java对象 转 JSON字符串*******");
       String str1 = JSON.toJSONString(list);
       System.out.println("JSON.toJSONString(list)==>"+str1);
       String str2 = JSON.toJSONString(user1);
       System.out.println("JSON.toJSONString(user1)==>"+str2);

       System.out.println("\n****** JSON字符串 转 Java对象*******");
       User jp_user1=JSON.parseObject(str2,User.class);
       System.out.println("JSON.parseObject(str2,User.class)==>"+jp_user1);

       System.out.println("\n****** Java对象 转 JSON对象 ******");
       JSONObject jsonObject1 = (JSONObject) JSON.toJSON(user2);
       System.out.println("(JSONObject) JSON.toJSON(user2)==>"+jsonObject1.getString("name"));

       System.out.println("\n****** JSON对象 转 Java对象 ******");
       User to_java_user = JSON.toJavaObject(jsonObject1, User.class);
       System.out.println("JSON.toJavaObject(jsonObject1, User.class)==>"+to_java_user);
  }
}

posted @ 2020-08-28 01:21  Tony小哥  阅读(175)  评论(3编辑  收藏  举报