您当前的位置: 首页 >  json

white camel

暂无认证

  • 2浏览

    0关注

    442博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

JSON——概述、JSON语法、序列化和反序列化

white camel 发布时间:2020-02-21 07:45:38 ,浏览量:2

目录
  • JSON概述
  • JSON对象定义和基本使用
  • JSON对象和JSON字符串对象的互转
    • Jackson解析器
      • Java对象转为JSON数据
      • JSON数据转Java对象
  • Demo
JSON概述

跳转到目录 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 + '\'' +
                '}';
    }
}
关注
打赏
1661428283
查看更多评论
立即登录/注册

微信扫码登录

0.0451s