JSON数据与Java对象的相互转换

  • JSON解析器

    常见的解析器:Jsonlib 、Gson、 fastjson、 jackson

  1. JSON转化为Java对象

    1. 使用步骤:

      1、导入jackson的相关jar包
      2、创建jackson核心对象ObjectMapper
      3、使用ObjectMapper的相关方法进行转换
      1、readValue(json字符串数组,Class)
  2. Java转化为JSON对象

    1. 使用步骤

      1、导入jackson的相关jar包
      2、创建jackson核心对象ObjectMapper
      3、使用ObjectMapper的相关方法进行转换
      1. 转换方式:

         * writeValue(参数1,obj):
        参数1:
        File:将obj对象转换为JSON字符串,并保存到指定的文件中
        Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
        OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
        * writeValueAsString(obj):将对象转为json字符串
      2. 注解

        1. @JsonIgnore:排除属性。
      3. @JsonFormat:属性值得格式化

        • @JsonFormat(pattern = "yyyy-MM-dd")
        1. 复杂Java对象转换

          1. List:数组
          2. Map:对象格式一致

创建person类

public class Person {
private String name;
private Integer age;
private String gender;
//@JsonIgnore //忽略该属性
@JsonFormat(pattern = "yyyy-MM-dd")//属性格式化
private Date birthday; public Date getBirthday() {
return birthday;
} public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Person() {
} @Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
'}';
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public String getGender() {
return gender;
} public void setGender(String gender) {
this.gender = gender;
}
}

Java转化为JSON对象

JacksonTest

public class JacksonTest {

 //Java对象转为JSON
@Test
public void test1() throws IOException {
//创建Person对象
Person person = new Person();
person.setName("张三");
person.setAge(21);
person.setGender("男");
ObjectMapper om = new ObjectMapper();
/*
writeValue(参数,obj)
参数1.:
File:将对象转换为json字符串,并保存指定的文件中
Writer:将对象转换为json字符串,并将json数据填充到字符输出流中
Outputstream:将对象转换为json字符串,并将json数据填充到字节输出流中
*/
/*//writeValue写到D://a.txt中
om.writeValue(new File("D://a.txt"),person);*/
//writeValue,数据关联到Writer中
// om.writeValue(new FileWriter("d://b.txt"),person); //将对象转化成json对象
String s = om.writeValueAsString(person);
System.out.println(s);
} @Test
public void test2() throws IOException {
//创建Person对象
Person person = new Person();
person.setName("张三");
person.setAge(21);
person.setGender("男");
person.setBirthday(new Date());
ObjectMapper om = new ObjectMapper();
String s = om.writeValueAsString(person);
System.out.println(s); } @Test
public void test3() throws IOException {
//创建Person对象
Person person = new Person();
person.setName("张三");
person.setAge(21);
person.setGender("男");
person.setBirthday(new Date());
//创建Person对象
Person person1 = new Person();
person1.setName("张三");
person1.setAge(21);
person1.setGender("男");
person1.setBirthday(new Date());
//创建Person对象
Person person2 = new Person();
person2.setName("张三");
person2.setAge(21);
person2.setGender("男");
person2.setBirthday(new Date()); //创建list集合
List<Person> list = new ArrayList<Person>();
list.add(person);
list.add(person1);
list.add(person2);
ObjectMapper om = new ObjectMapper();
String s = om.writeValueAsString(list);
System.out.println(s);
/**
* 输出结果:
* [{"name":"张三","age":21,"gender":"男","birthday":"2019-08-23"},
* {"name":"张三","age":21,"gender":"男","birthday":"2019-08-23"},
* {"name":"张三","age":21,"gender":"男","birthday":"2019-08-23"}]
*
*/ } @Test
public void test4() throws IOException {
Map<String,Object> map=new HashMap<String, Object>();
map.put("name","李四0");
map.put("age",23);
map.put("gender","男"); ObjectMapper om = new ObjectMapper();
String s = om.writeValueAsString(map);
System.out.println(s);
/**
* 输出结果:
* {"gender":"男","name":"李四0","age":23}
*/
}
}

JSON转化为Java对象

   public class JacksonTest {
@Test
public void test5() throws IOException {
//初始化
String json="{\"gender\":\"男\",\"name\":\"李四0\",\"age\":23}";
ObjectMapper ob=new ObjectMapper();
//转化为Java对象 person对象
Person person = ob.readValue(json, Person.class);
System.out.println(person);
}
}

案例--效验用户名是否存在

当文本输入框失去焦点,发送ajax请求,查询数据库中是否存在该用户

​ 存在:提示存在

​ 不存在:提示可用

1. 服务器响应的数据,在客户端使用时,要想当做json数据格式使用。有两种解决方案:
1. $.get(type):将最后一个参数type指定为"json"
2. 在服务器端设置MIME类型
response.setContentType("application/json;charset=utf-8");

效果图:

Servlet

import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map; @WebServlet("/findUserServlet")
public class FindUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//期望服务器响应回应的格式 {"userExsit":"true","msg":"用户名此用户名太受欢迎,请更换一个"}
// "userExsit":"false","msg":"用户名可用"}
Map<String, Object> map = new HashMap<String, Object>();
//设置相应格式为json
response.setContentType("application/json;charset=utf-8");
//获取用户名
String username = request.getParameter("username");
System.out.println(username);
//查询数据库
if ("tom".equals(username)) {
map.put("userExsit", true);
map.put("msg", "用户名此用户名太受欢迎,请更换一个"); } else {
map.put("userExsit", false);
map.put("msg", "用户名可用");
}
System.out.println(map);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.writeValue(response.getWriter(), map); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}

html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
input {
padding: 10px;
margin: 5px;
} </style>
<script src="js/jquery-3.3.1.min.js"></script>
<script>
$(function () {
$("#username").blur(function () {
//获取username的值
var username = $(this).val(); //发送ajax请求
//期望服务器响应回应的格式 {"userExsit":"true","msg":"用户名此用户名太受欢迎,请更换一个"}
// "userExsit":"false","msg":"用户名可用"}
$.get("findUserServlet",{"username":username},function (data) { var span = $("#sp");
// 判断userExsit的值是否是true if (data.userExsit) {
//存在
span.html(data.msg) span.css("color", "red");
} else {
// 不存在
span.html(data.msg)
span.css("color", "green"); }
//1.
//},"json");
});
});
}) </script>
</head>
<body>
<div align="center">
<form action="" method="post">
用户名:<input type="text" id="username" name="username" placeholder="请输入用户名"><br><span id="sp" class="span"></span><br>
密&ensp;&ensp;码:<input type="password" name="password" placeholder="请输入密码"><br>
<input type="submit" value="注册">
</form>
</div>
</body>
</html>

源码地址GitHub:https://github.com/PoetryAndYou/JQuery

JSON数据与Java对象的相互转换的更多相关文章

  1. JSON数据和Java对象的相互转换

    JSON解析器: 常见的解析器: Jsonlib, Gson, fastjson, jackson 其中应用最广泛的是jackson,阿里的fastjson虽然比jackson快一点,但存在的问题比较 ...

  2. json字符串与java对象的相互转换(jackson)

    1.java对象转换为json字符串 package com.chichung.json; import com.fasterxml.jackson.core.JsonProcessingExcept ...

  3. 使用Gson转换json数据为Java对象的一个例子

    记录工作中碰到的一个内容. 原料是微信平台的一个接口json数据. { "errcode" : 0, "errmsg" : "ok", &q ...

  4. JSON解析器之jackson json数据和java对象转换

  5. Java中JSON字符串与java对象的互换实例详解

    这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...

  6. Java中JSON字符串与java对象的互换实例详解(转)

    http://www.jb51.net/article/90914.htm 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要 ...

  7. 用JAVA进行Json数据解析(对象数组的相互嵌套)

    这段时间我们在做一个英语翻译软件的小小小APP,涉及到了对Json数据的解析,所以特地来总结一下! 假设我们要对如下数据进行解析,其实在平时,返回的Json数据是很乱的,很难分清数据的关系,这是经过相 ...

  8. java json数据转List对象的集合-----阿里巴巴插件---及原生json---JSON 与 对象 、集合 之间的转换 JSON字符串和java对象的互转【json-lib】

    List<RunfastFullLess> list=(List<RunfastFullLess>)JSONArray.parseObject(activity.getFull ...

  9. 一种从JSON数据创建Java类的高效办法

    <一种从JSON数据创建Java类的高效办法> 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs JSON格式的数据经常会遇到,比如调用Web服 ...

随机推荐

  1. yum安装出现No package vim available解决办法

    [root@iZwz96wgquf8g6okusxr0uZ yum.repos.d]# yum install yum-downloadLoaded plugins: fastestmirrorLoa ...

  2. windows上gedit 安装

    1. 用浏览器打开https://wiki.gnome.org/Apps/Gedit 下载并安装 gedit 文本编辑器.这个操作无需管理员权限. 2. 把 gedit 放到桌面或者快速启动栏,这样你 ...

  3. CS231n:Python Numpy教程

    Python 基本数据类型 容器 列表 字典 集合 元组 函数 类 Numpy 数组 访问数组 数据类型 数组计算 广播 SciPy 图像操作 MATLAB文件 点之间的距离 Matplotlib 绘 ...

  4. [HNOI2007] 理想正方形 二维ST表

    题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一行为3个整数,分别表示a,b,n的值 第二行至 ...

  5. comparator接口实现时,只需要实现 int compare(T o1, T o2)方法?

    从Comparator接口的源码,可以看到Comparator接口中的方法有三类: 1 普通接口方法 2 default方法 3 static方法 其中default方法和static方法 是java ...

  6. 详解 Redis 内存管理机制和实现

    Redis是一个基于内存的键值数据库,其内存管理是非常重要的.本文内存管理的内容包括:过期键的懒性删除和过期删除以及内存溢出控制策略. 最大内存限制 Redis使用 maxmemory 参数限制最大可 ...

  7. centos 7.6修改ssh端口,设置防火墙规则

    一.修改ssh端口 1 使用 root 用户进入 /etc/ssh目录 2 备份ssh配置文件 cp sshd_config sshd_config-bak 3 使用 vim 打开 sshd_conf ...

  8. day10整理(面对对象,过程,类和对象)

    目录 一 回顾 (一)定义函数 (二)定义函数的三种形式 1.空函数 2.有参函数 3.无参函数 (三)函数的返回值 (四)函数的参数 1.形参 2.实参 二 面向过程编程 三 面向对象过程 四 类和 ...

  9. Udp 异步通信(三)

    转自:https://blog.csdn.net/zhujunxxxxx/article/details/44258719 1)服务端 using System; using System.Colle ...

  10. (三)django--带Template的网站

    我们接着(二),在new下新建一个templates(注意必须是这个名字,不然要进行配置),然后在该目录下新建一个test.html 2.我们在pycharm中新建的html文件里面不会有内容,我们输 ...