JSON总结

前言

这里总结了一下JSON的相关知识
博文首发博客
json

概念

JavaScript Object Notation,JS对象表示法.

  • 轻量级的数据交换格式
  • 更小,更快,更易解析
  • 独立于编程语言

JSONObject : 名称/值对

{
	"name":"yujian95",
	"email":"clj9509@163.com"
}

JSONArray(数组)

[
	{
		"name":"yujian95",
		"email":"clj9509@163.com"
	},
	{
		"name":"遇见1995",
		"email":"clj9509@163.com"
	}
]

实践

  • 生成
  • 解析
  • 校验
  • 转换为JavaBean
常用类包
包名说明特点
org.json官方推荐通用,但复杂
GSONGoogle基于反射,实现JSON对象,字串和java对象互转
Jackson号称最快简易
org.json
  • put(“key”,value):输入键值对
  • get(“key”):获取值
  • getJSONArray(“scores”):获取指定数组值

Maven依赖

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20160810</version>
</dependency>

 	public static void testJsonObject(){
        User user = new User();
        user.setUserName("yujian95");
        user.setRole("admin");
        user.setId(1);
        user.setPassword("password");

        // 构建对象
        JSONObject object = new JSONObject();
        object.put("username",user.getUserName());
        object.put("id" ,user.getId());
        object.put("role",user.getRole());
        object.put("password",user.getPassword());

        // 解析对象
        System.out.println(object);
        System.out.println("name:"+object.getString("username"));
        System.out.println("role:"+object.getString("role"));
        System.out.println("id:"+object.getInt("id"));
        System.out.println("password:"+object.getString("password"));
    }

	// 读取文件
    public static void testJsonFile() {
        File file = new File("com/user.json");
        try {
            FileReader reader = new FileReader(file);
            int fileLen = (int) file.length();
            char[] chars = new char[fileLen];
            reader.read(chars);
            String s = String.valueOf(chars);
            JSONObject object = new JSONObject(s);

            System.out.println(object);
            System.out.println("name:" + object.getString("username"));
            System.out.println("role:" + object.getString("role"));
            System.out.println("id:" + object.getInt("id"));
            System.out.println("password:" + object.getString("password"));
        } catch (Exception e) {

        }
    }
Gson

Maven依赖

<dependency>
	<groupId>com.google.code.gson</groupId>
	<artifactId>gson</artifactId>
	<version>2.7</version>
</dependency>
    public static void testJsonObject() {
        //构造对象
        Person p = new Person();
        p.setName("Tom");
        p.setAge(20);
        p.setScores(Arrays.asList(60,70,80));

        //从Java对象到JSON字符串
        Gson gson = new Gson();
        String s = gson.toJson(p);
        System.out.println(s); //{"name":"Tom","age":20,"scores":[60,70,80]}

        //从JSON字符串到Java对象
        Person p2 = gson.fromJson(s, Person.class);
        System.out.println(p2.getName());  //Tom
        System.out.println(p2.getAge());   //20
        System.out.println(p2.getScores());//[60, 70, 80]

        //调用GSON的JsonObject
        JsonObject json = gson.toJsonTree(p).getAsJsonObject(); //将整个json解析为一颗树
        System.out.println(json.get("name"));  //"Tom"
        System.out.println(json.get("age"));   //20
        System.out.println(json.get("scores"));//[60,70,80]

    }

    public static void testJsonFile() {
        Gson gson = new Gson();
        File file = new File("D:\\MavenLearn\\src\\main\\java\\com\\books2.json");

        try (FileReader reader = new FileReader(file)) {
            List<Book> books = gson.fromJson(reader, new TypeToken<List<Book>>(){}.getType());

            for(Book book : books)
            {
                System.out.println(book.getAuthor() + ",  " + book.getTitle());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
jackson

Maven依赖

<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.9.6</version>
</dependency>
	static void testJsonObject() throws IOException {
		ObjectMapper om = new ObjectMapper();

		//构造对象
    	Person p = new Person();
    	p.setName("Tom");
    	p.setAge(20);
    	p.setScores(Arrays.asList(60,70,80));

    	//将对象解析为json字符串
		String jsonStr = om.writeValueAsString(p);
		System.out.println(jsonStr);

		//从json字符串重构对象
		Person p2 = om.readValue(jsonStr, Person.class);
		System.out.println(p2.getName());
		System.out.println(p2.getAge());
		System.out.println(p2.getScores());

		//从json字符串重构为JsonNode对象
		JsonNode node = om.readTree(jsonStr);
		System.out.println(node.get("name").asText());
		System.out.println(node.get("age").asText());
		System.out.println(node.get("scores"));
	}

	static void testJsonFile() throws IOException {
		ObjectMapper om = new ObjectMapper();

		//从json文件中加载,并重构为java对象
		File json2 = new File("D:\\MavenLearn\\src\\main\\java\\com\\books2.json");
		List<Book> books = om.readValue(json2, new TypeReference<List<Book>>(){});
		for (Book book : books) {
			System.out.println(book.getAuthor());
			System.out.println(book.getTitle());
		}
	}

与xml的对比

  • 正常情况下,JSON比较快.
  • xml 注重标签顺序.
  • JSON 丢失信息(顺序性会变).

参见

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值