JSON在JS与Java中的基础应用


JSON(JavaScript Object Notation)是一种JavaScript对象标识法,是一种轻量级的文本数据交互格式,独立于语言,具有自我描述性,更容易理解。

语法规则

  • 数据由键(key)值(value)描述用逗号分隔
  • 大括号表示一个完整的对象,可以拥有多个键值对
  • 中括号保存数组,多个对象之间使用逗号分隔

例如:

[
	{
		"name":"Tom",
		"salary":3000,
		"department":"研发部",
		"direction":[
			{"language":"C++"},
			{"language":"Java"}
		]
	}
]

JSON在JS中的应用

初始化

JSON作为JS对象的一种同样可以用var来定义,如下:

var json = [
    {
        "empId":"S001",
        "name":"Jerry",
        "department":"研发部"
    },
    {
        "empId":"S002",
        "name":"Tom",
        "department":"市场部",
        "province":[
            {"name":"河北"},
            {"name":"天津"}
        ]
    }
];

console.log(json);

通过输出在控制台的信息可以看出,JSON的本质就是一个复杂的数组。
在这里插入图片描述
同样也可以先定义一个空数组,在通过赋值的方式定义内容。

var employee = {};
employee.empId = "S003";
employee.name = "Jack";
employee.department = "研发部";

console.log(employee);

JSON转字符串

调用JSON.stringify()方法,可将JSON转换为字符串。

// 使用上节的JSON
var str = JSON.stringify(json);

console.log(str);

字符串转JSON

调用JSON.parse()方法,可以将JSON格式的字符串转换为JSON对象。

var jsonStr = "{\"empId\":\"S004\",\"name\":\"Mary\",\"department\":\"销售部\"}";
var emp = JSON.parse(jsonStr);

console.log(emp);

在这里插入图片描述

JSON与Java的交互

Java的JSON工具包有FastJson、Jackson、Gson、Json-lib等。FastJson是阿里巴巴的JSON序列化和反序列化的工具包,拥有简单的API,效率较高的特点。

将实体类进行序列化与反序列化

  • JSON.toJSONString(Objec object):将实体类转换为JSON,返回结果为JSON格式的String字符串。
package com.json;

import com.alibaba.fastjson.JSON;
import java.util.Date;

public class Example {
    public static void main(String[] args) {
        Date date = new Date();
        Employee employee = new Employee(9001, "Tom", 10000f, date, "B805");

        String empStr = JSON.toJSONString(employee);
        System.out.println(employee);
    }
}

toJSONString()方法的参数为Object类,所以也可以将集合元素直接转换为JSON字符串。

  • JSON.parseObject(String text, Class<T> clazz):将String字符串转换为实体类。
package com.json;

import com.alibaba.fastjson.JSON;
import java.util.Date;

public class Example {
    public static void main(String[] args) {
        Date date = new Date();
        Employee employee = new Employee(9001, "Tom", 10000f, date, "B805");

        String empStr = JSON.toJSONString(employee);
        Employee emp = JSON.parseObject(empStr, Employee.class);

		System.out.println(empStr);
        System.out.println(emp);
    }
}

  • JSON.parseArray(String text, Class<T> clazz):将多元素JSON字符串转换为数组,返回的结果为List集合。
package com.json;

import com.alibaba.fastjson.JSON;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class Example {
    public static void main(String[] args) {

        List<Employee> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            Employee emp = new Employee();
            emp.setEmpId(9001 + i);
            emp.setName("员工" + i);

            list.add(emp);
        }

        String empsStr = JSON.toJSONString(list);
        List<Employee> emps = JSON.parseArray(empsStr, Employee.class);

        System.out.println(empsStr);
        for (Employee e : emps) {
            System.out.println(e);
        }
    }
}

FastJson注解

在Java应用中,可以通过使用FastJson提供的注解来写在实体类的属性上,对属性进行规范,例如@JSONField(name = "time")可以修改JSON字符串的键名称,@JSONField(format = "yyyy-MM-dd")对该属性进行格式化,@JSONField(serialize = false)可以设置该属性是否展示在JSON字符串中。
示例:

package com.json;

import com.alibaba.fastjson.annotation.JSONField;

import java.util.Date;

public class Employee {
    private Integer empId;
    private String name;
    private Float salary;
    @JSONField(name = "time", format = "yyyy-MM-dd")
    private Date createTime;
    @JSONField(serialize = false)
    private String address;

    public Employee() {
    }

    public Employee(Integer empId, String name, Float salary, Date createTime, String address) {
        this.empId = empId;
        this.name = name;
        this.salary = salary;
        this.createTime = createTime;
        this.address = address;
    }

    public Integer getEmpId() {
        return empId;
    }

    public void setEmpId(Integer empId) {
        this.empId = empId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Float getSalary() {
        return salary;
    }

    public void setSalary(Float salary) {
        this.salary = salary;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "empId=" + empId +
                ", name='" + name + '\'' +
                ", salary=" + salary +
                ", createTime=" + createTime +
                ", address='" + address + '\'' +
                '}';
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值