Java使用JSON格式输出

108 阅读3分钟

我正在参加「掘金·启航计划」

创建项目和HTML页面进行代码测试

选用springboot项目为例,在src/main下创建webapp文件夹,在下面创建HTML页面进行js代码测试

如何生成webapp文件夹? 点击-->创建webapp文件夹



<!DOCTYPE html>

<html lang="en" >

<head>

    <meta charset="UTF-8" >

    <title>Title</title>

</head>

<body>



<script type="text/javascript" >

    //编写一个JS对象

  var user={

        name: "魏一鹤" ,

        age:23,

        sex: "男"

 };

    //输出一个这个JS对象

  console.log(user); //{age: "23",name: "魏一鹤",sex: "男"}

 //将JS对象转换为JSON字符串

  var json = JSON.stringify(user);

    console.log(json) //{"name":"魏一鹤","age":"23","sex":"男"}

 //将JSON字符串转换为JS对象

  var js=JSON.parse(json);

    console.log(js);

</script>



</body>

</html>

趣味代码 扒百度源码

sp1.baidu.com/5a1Fazu8AA5…

后面加上wd参数就是我们输入的内容和请求结果

sp1.baidu.com/5a1Fazu8AA5…

和我们在网页搜索框输入动态变化是类似的

controller发送请求接收返回json

现在两大转换json第三方工具主流就是jackson和fastjson(阿里巴巴)

1 引入jackson依赖(jar包)



 <!--jackson依赖 用来转化json-->

<dependency>

    <groupId>com.fasterxml.jackson.core</groupId>

    <artifactId>jackson-databind</artifactId>

    <version>2.9.8</version>

</dependency>





<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-web</artifactId>

    <version>2.3.0.RELEASE</version>

</dependency>

2 创建实体和controller

实体代码如下 toString 无参无参构造 getset

package com.wyh.entity;



 /**

 *  @program:  SpringBoot-Ajax-JSON

 *  @description:  User实体类

 *  @author:  魏一鹤

 *  @createDate:  2022-02-07 21:45

 **/



public class User {

    private String name;

    private int age;



    public User() {

    }



    @Override

    public String toString() {

        return "User{" +

                "name='" + name + ''' +

                ", age=" + age +

                ", sex='" + sex + ''' +

                '}' ;

    }



    public User(String name, int age, String sex) {

        this.name = name;

        this.age = age;

        this.sex = sex;

    }



    public String getName() {

        return name;

    }



    public void setName(String name) {

        this.name = name;

    }



    public int getAge() {

        return age;

    }



    public void setAge(int age) {

        this.age = age;

    }



    public String getSex() {

        return sex;

    }



    public void setSex(String sex) {

        this.sex = sex;

    }



    private String sex;

}

3 创建controller并且写方法请求并使用jackson进行json格式转化

@ResponseBody注解是spring提供的,直接处理返回JSON字符串就行

jackson主要处理对象的JSON数据格式

JSON对象数据格式,以"[]"进行包裹,每个对象用","进行分隔并且用"{}"括起来,最后一个数据没有","分隔

[{"name":"魏一鹤","age":1,"sex":"男"},{"name":"杨玉婷","age":2,"sex":"女"}]

package com.wyh.controller;



import com.fasterxml.jackson.core.JsonProcessingException;

import com.fasterxml.jackson.databind.ObjectMapper;

import com.wyh.entity.User;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;



 /**

 *  @program:  SpringBoot-Ajax-JSON

 *  @description:  用户中心控制器 返回接收JSON格式的数据

 *  @author:  魏一鹤

 *  @createDate:  2022-02-07 21:44

 **/

@Controller

public class UserController {

    //现在两大转换json第三方工具主流就是jackson和fastjson(阿里巴巴)

 //如果出现乱码,我们需要设置他的编码格式为utf-8,以及它返回的类型,通过@RequesMapping的produces属性来实现

    //produces:指定响应体返回类型和编码

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

    //正常返回的话会走视图解析器,但是json需要返回的是字符串,使用@ResponseBody就能完美解决

 @ResponseBody //响应 返回json格式的数据 将服务器端返回的对象转换为json对象响应回去

 //@RequestBody //接收 接收json格式的数据 将客户端返回的对象转换为json进行接收

  public String  json1() throws JsonProcessingException {

        //需要一个jackson的对象映射器 其实就是一个类 ObjectMapper 使用它可以直接将对象转换为json字符串

 ObjectMapper objectMapper = new ObjectMapper();

        //创建一个对象

 User user=new User( "魏一鹤" ,1, "男" );

        //输出Java对象

 System.out.println( "Java对象" +user);

        //将Java对象转换为JSON字符串 使用writeValueAsString方法把实体放进去即可转化json字符串 需要抛出异常

 String JSONUser = objectMapper.writeValueAsString(user);

        //输出JSON字符串

 System.out.println( "JSON字符串" +JSONUser);

        //由于使用了@ResponseBody注解 这里会将JSONUser以JSON字符串的格式直接返回 十分方便

  return JSONUser;

    }

}









@RequestMapping(value = "/json2" )

@ResponseBody

public String json2() throws JsonProcessingException {

    List<User> list=new ArrayList<>();

    User user1=new User( "魏一鹤" ,1, "男" );

    User user2=new User( "杨玉婷" ,2, "女" );

    list.add(user1);

    list.add(user2);

    ObjectMapper objectMapper = new ObjectMapper();

    String strJSON = objectMapper.writeValueAsString(list);

    return strJSON;

}

测试发现正常返回json字符串

输出如下

Java对象User{name='魏一鹤', age=1, sex='男'}

JSON字符串{"name":"魏一鹤","age":1,"sex":"男"}

  1. 项目启动保错(jackson版本问题导致项目启动失败)

出现这个错误是因为jackson依赖和springboot依赖版本有冲突,把jsckson的依赖版本从2.9.8换成 2.11.0即可