目录
- JSON概述
- JSON对象定义和基本使用
- JSON对象和JSON字符串对象的互转
- Jackson解析器
- Java对象转为JSON数据
- JSON数据转Java对象
- Jackson解析器
- Demo
跳转到目录 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,就是说不同的编程语言JSON数据是一致的。
JSON是一种轻量级的数据格式,一般用于数据交互;服务器返回给客户端的数据,一般都是JSON格式或者XML格式; JSON 比 XML 更小、更快,更易解析。
JSON对象定义和基本使用跳转到目录
1、JSON 语法
【1】定义格式
Json数据是由键值对
构成的,键用引号,数据用逗号分隔,用大括号保存对象,中括号保存数组. 值得取值类型:
数字(整数或浮点数)
字符串(在双引号中)
逻辑值(true 或 false)
数组(在中括号中):{"person":[{},{}]}
对象(在大括号中):{"address":{"province":"江西"}}
null
var 变量名 = {
“key” : value , // Number类型
“key2” : “value” , // 字符串类型
“key3” : [] , // 数组类型
“key4” : {}, // json 对象类型
“key5” : [{},{}] // json 数组
};
var jsons = {
"key1":"abc", // 字符串类型
"key2":1234, // Number
"key3":[1234,"21341","53"], // 数组
"key4":{ // json类型
"key4_1" : 12,
"key4_2" : "kkk"
},
"key5":[{ // json数组
"key5_1_1" : 12,
"key5_1_2" : "abc"
},{
"key5_2_1" : 41,
"key5_2_2" : "bbj"
}]
};
【2】获取数据
方法一:json对象.键名
方法二:json对象["键名"]
方法三:数组对象[索引]
var json2 = {
"key1": "abc",
"key2": 1234,
"key3": [1234, true, "hello"],
"key4": {
"key4_1": 41,
"ley4_2": "zy"
},
"key5": [{
"key5_1_1": 511,
"key5_1_2": "512"
}, {
"key5_2_1": 521,
"key5_2_2": "522",
"key5_2_3": false
}]
};
// 访问json的属性
alert(json2.key1);
alert(json2.key3[1]);
alert(json2.key4.key4_1);
alert(json2.key4[0].key5_1_1);
JSON对象和字符串对象的互转
跳转到目录
-
JSON.stringify( json ); 此方法可以把一个json对象转换成为json字符串
-
JSON.parse( jsonString ); 此方法可以把一个json字符串转换成为json对象
// 一个json对象
var obj = {
"a" : 12,
"c" : "str"
};
// 把json对象转换成为字符串对象
var objStr = JSON.stringify(obj);
//
alert(objStr);
// 把json对象的字符串,转换成为 json对象
var jsonObj = JSON.parse(objStr);
alert(jsonObj);
1、常见的JSON解析器 Jsonlib、Gson、fastjson、jackson等
2、序列化和反序列化 序列化: Java对象 —> JSON/XML 反序列化: JSON/XML —> Java对象
Java对象转为JSON数据跳转到目录 步骤:
- 导入 Jackson 相关 jar 包
- 创建 Jackson 核心对象 ObjectMapper
- 调用 ObjectMapper 的相关方法进行转换
转换方法:
- writeValue(参数,obj)
- 参数为File:将obj 对象转换为Json字符串,并保存到指定的文件中
- 参数为 Writer:将obj对象转换为Json字符串,并将 json 数据填充到字符输出流中
- 参数为 OutputStream:将 obj 对选哪个转换为Json字符串,并将json 数据填充到字节输出流中 writeValueAsString(obj):将对象转换为json字符串
注解:在属性前面加注解
- @JsonIgnore:排除属性
- @JsonFormat:属性值的格式化
// Java对象转为JSON字符串(反序列化操作)
@Test
public void test1() throws Exception{
//1. 创建Person对象
Person p = new Person();
p.setName("朝阳");
p.setAge(22);
p.setGender("man");
//2. 创建Jackson的核心对象, ObjectMapper
ObjectMapper mapper = new ObjectMapper();
//3. 转换
String json = mapper.writeValueAsString(p);
// System.out.println(json); // {"name":"朝阳","age":22,"gender":"man"}
// writeValue(File, obj) 将数据写入到e://a.txt文件中
// mapper.writeValue(new File("e://a.txt"), p);
//writeValue.将数据关联到Writer中
//mapper.writeValue(new FileWriter("e://b.txt"),p);
}
@Test
public void test2() throws Exception{
Person p = new Person();
p.setName("张三");
p.setAge(22);
p.setGender("男");
p.setBirthday(new Date());
/**
* // @JsonIgnore //忽略该属性
* @JsonFormat(pattern = "yyyy-MM-dd") // 属性值格式化
* private Date birthday;
*/
// 转换
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(p);
System.out.println(json); //{"name":"张三","age":22,"gender":"男","birthday":1581061966873}
}
@Test
public void test3() throws Exception{
//1.创建Person对象
Person p = new Person();
p.setName("张三");
p.setAge(23);
p.setGender("男");
p.setBirthday(new Date());
Person p1 = new Person();
p1.setName("张三");
p1.setAge(23);
p1.setGender("男");
p1.setBirthday(new Date());
Person p2 = new Person();
p2.setName("张三");
p2.setAge(23);
p2.setGender("男");
p2.setBirthday(new Date());
// 创建List集合
List ps = new ArrayList();
ps.add(p);
ps.add(p1);
ps.add(p2);
// 转换
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(ps);
System.out.println(json);
}
@Test
public void test4() throws Exception {
Map map = new HashMap();
map.put("name", "张三");
map.put("age", 23);
map.put("gender", "男");
// 转换
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(map);
System.out.println(json);
}
JSON数据转Java对象
跳转到目录 步骤:
- 导入 Jackson 相关 jar 包
- 创建 Jackson 核心对象 ObjectMapper
- 调用 ObjectMapper 的相关方法进行转换
转换方法:
- readValue(json字符串数据,Class)
// JSON字符串转换为Java对象(序列化操作)
@Test
public void test5() throws Exception{
// 初始化JSON字符串
String json = "{\"name\":\"张三\",\"age\":22,\"gender\":\"男\",\"birthday\":1581061966873}";
// 创建ObjectMapper对象
ObjectMapper mapper = new ObjectMapper();
// 转换为Java对象(Person)
Person p = mapper.readValue(json, Person.class);
System.out.println(p);
}
Demo
跳转到目录
- sql
CREATE TABLE kw(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
);
INSERT INTO kw VALUES(NULL,'小米手机');
INSERT INTO kw VALUES(NULL,'小米饭怎么做');
INSERT INTO kw VALUES(NULL,'小米耳机');
INSERT INTO kw VALUES(NULL,'小米音响');
INSERT INTO kw VALUES(NULL,'小米手环');
INSERT INTO kw VALUES(NULL,'华为手机');
INSERT INTO kw VALUES(NULL,'华为耳环');
INSERT INTO kw VALUES(NULL,'华为笔记本');
INSERT INTO kw VALUES(NULL,'华为p20');
INSERT INTO kw VALUES(NULL,'华为路由器');
INSERT INTO kw VALUES(NULL,'华为手环');
INSERT INTO kw VALUES(NULL,'蘑菇');
INSERT INTO kw VALUES(NULL,'小鸡炖蘑菇');
INSERT INTO kw VALUES(NULL,'蘑菇有毒');
INSERT INTO kw VALUES(NULL,'蘑菇可以吃吗');
INSERT INTO kw VALUES(NULL,'麻辣香菇');
INSERT INTO kw VALUES(NULL,'黄瓜');
INSERT INTO kw VALUES(NULL,'西瓜');
INSERT INTO kw VALUES(NULL,'冬瓜');
INSERT INTO kw VALUES(NULL,'甜瓜');
INSERT INTO kw VALUES(NULL,'黄瓜是家电吗');
- jsp
$(function () {
$("#tid").keyup(function () {
// 每次请求后都情况
$("#did").empty().hide();
// 获取当前输入框的值
var content = $(this).val();
// 判断是否需要发请求
if ("" == content) {
return;
}
// 发送请求给服务
$.ajax({
url: "http://localhost:8080/ajaxdemo/searchServlet",
data: "content=" + content,
type: "get",
success: function (data) {
// 注意: data就是字符串,是JSON格式的字符串
// 把JSON字符串转换为JSON对象
var jsonObj = JSON.parse(data);
// 判断是否有数据
if (jsonObj.length > 0) {
for (keyword of jsonObj) {
var keywordName = keyword.name;
// 拼标签
var divTag = "" + keywordName + "";
// jQuery DOM操作
$("#did").append(divTag);
}
// 让下方div显示出来
$("#did").show(); // 动画方法,实际是修改display的属性值
}
}
})
// 服务器查询, 接收数据,添加到下方div中
});
})
function m1(obj) {
$(obj).css("backgroundColor", "gray");
}
function m2(obj) {
$(obj).css("backgroundColor", "white");
}
Insert title here
Sunny搜索
- Servlet
@WebServlet("/checkNameServlet")
public class CheckNameServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
// 接收username
String username = request.getParameter("username");
// 调用service, 查看是否存在
UserService service = new UserService();
int count = service.count(username);
// 返回1或0
if (count > 0){
response.getWriter().print("1");
} else {
response.getWriter().print("0");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
- Service
public class KeywordService {
public List likeName(String content) {
return new KeywordDao().likeName(content);
}
}
- Dao
public class KeywordDao {
public List likeName(String content) {
QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
String sql="SELECT * FROM kw WHERE name LIKE ?";
//执行sql语句
try {
return qr.query(sql,new BeanListHandler(Keyword.class),"%"+content+"%");
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
- domain
public class Keyword {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Keyword{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}