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. Redis系列(一):Redis简介

    一.Redis概述 Redis是一个开源(遵循BSD协议)Key-Value数据结构的内存存储系统,用作数据库.缓存和消息代理.它支持5种数据结构:字符串string.哈希hash.列表list.集合 ...

  2. Redis 3.0中文版学习(一)

    网址:http://wiki.jikexueyuan.com/project/redis-guide/entry-to-master-a.html http://www.yiibai.com/redi ...

  3. [Luogu3065][USACO12DEC]第一!First!

    题目描述 Bessie has been playing with strings again. She found that by changing the order of the alphabe ...

  4. 解决git报错“The file will have its original line endings in your working directory”的方法

    在执行命令 git commit --all -m  '说明' 时报错“The file will have its original line endings in your working dir ...

  5. 字符编码 + python2和python3的编码区别(day08整理)

    目录 昨日回顾 二十三.元组内置方法 二十四.散列表 二十五.字典内置方法 二十六.集合内置方法 二十七.深浅拷贝 拷贝 浅拷贝 深拷贝 今日内容 二十八.字符编码 1.文本编辑器存储信息的过程 2. ...

  6. 针对工程实践项目的用例建模Use Case Modeling

    一.什么是用例建模(Use Case Modeling) 1.用例(Use Case) (1)概念:用例是软件工程或系统工程中对系统如何反应外界请求的描述,是一种通过用户的使用场景来获取需求的技术. ...

  7. (JavaScript) base64 字符串 和 ArrayBuffer 之间转换

    base64 --> ArrayBuffer function base64ToUint8Array(base64String) { const padding = '='.repeat((4 ...

  8. Flask:对项目文件进行拆分

    在工作中,我们不可能将ORM的配置,ORM的操作,ORM的使用以及视图放到同一个文件里,大多数时候Flask都是按照MVC的设计理念进行部署的 1.MVC和MTV (1)MVC(Model-View- ...

  9. 通俗地说逻辑回归【Logistic regression】算法(一)

    在说逻辑回归前,还是得提一提他的兄弟,线性回归.在某些地方,逻辑回归算法和线性回归算法是类似的.但它和线性回归最大的不同在于,逻辑回归是作用是分类的. 还记得之前说的吗,线性回归其实就是求出一条拟合空 ...

  10. Apache Tomcat 远程代码执行漏洞(CVE-2019-0232)漏洞复现

    Apache Tomcat 远程代码执行漏洞(CVE-2019-0232)漏洞复现  一.     漏洞简介 漏洞编号和级别 CVE编号:CVE-2019-0232,危险级别:高危,CVSS分值:官方 ...