JSON 使用讲解

    在开发有关接口的时候,我们就需要设计接口返回的数据格式,常用的数据格式有xml、json等。那么今天我们就来看看json的使用。

一.JSON 描述。

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

二.语法规则。

   1. JSON是由‘名称/值’对组成的集合,’名称/值‘格式例如,“key1”:value1。

   2.JSON的值(value) 可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。

   3.JSON有两种结构,一种是对象,另一种是数组。

      (1).对象(object),是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)     分  隔。 是由{}括起来的,格式例如,{"key1":value1,"key2":value2,"key3":value3,...}。

      (2).数组(array) ,是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔,是由[]括起来的。格式例如,[{"key1":value1,"key2":value2,"key3":value3},{"key1":value1,"key2":value2,"key3":value3}...]。

三.JSON解析。   

1. 新建测试项目。

    实体类,

 

public class Person {
	private int id;
	private String name;
	private int age;
	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;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
	}
}

   使用GSON和JackJson分别解析。

  2. GSON。GSON是Google开发的Java API,用于转换Java对象和Json对象。

 

  2.1.  首先下载导入GSON的jar。

      (1).可以去github的链接,下载GSON的源码,自己编译,生成jar;

      (2).也可以直接下载jar包,GSONjar包下载链接。

      (3).gson-2.6.6.jar 下载链接。

   2.2.生成对象。

 

public static void main(String[] args) {
		Gson gson=new Gson();
		Person person=new Person();
		person.setId(1);
		person.setName("zhangsan");
		person.setAge(30);
		String str=gson.toJson(person);
		System.out.println(str);
}

   2.3.输出结果。

 

 

{"id":1,"name":"zhangsan","age":30}

 

  2.4.生成数组。

 

public static void main(String[] args) {
List<Person> list=new ArrayList<Person>();
        Gson gson=new Gson();
        Person person=new Person();
        person.setId(1);
        person.setName("zhangsan");
        person.setAge(30);
        list.add(person);
        Person person1=new Person();
        person1.setId(2);
        person1.setName("lisi");
        person1.setAge(20);
        list.add(person1);
        String str=gson.toJson(list);
        System.out.println(str);
}

 

  2.5.输出结果。

 

[{"id":1,"name":"zhangsan","age":30},{"id":2,"name":"lisi","age":20}]

 

  2.6.json解析对象。

 

public static void main(String[] args) {
String str="{\"id\":1,\"name\":\"zhangsan\",\"age\":30}";
		Gson gson=new Gson();
		Person person=gson.fromJson(str, Person.class);
		System.out.println(person.toString());
}

 

  2.7.输出结果。

 

Person [id=1, name=zhangsan, age=30]

  2.8.json解析数组。

 

 

public static void main(String[] args) {
String str = "[{\"id\":1,\"name\":\"zhangsan\",\"age\":30},{\"id\":2,\"name\":\"lisi\",\"age\":20}]";
		Gson gson = new Gson();
		Type type = new TypeToken<List<Person>>() {
		}.getType();
		List<Person> list = gson.fromJson(str, type);
		for (Person person : list) {
			System.out.println(person.toString());
		}
}

 

  2.9.输出结果。

 

Person [id=1, name=zhangsan, age=30]
Person [id=2, name=lisi, age=20]

 

  3.JackJson。

   Jackson框架是基于Java平台的一套数据处理工具,被称为“最好的Java Json解析器”。 
   Jackson框架包含了3个核心库:streaming,databind,annotations。

 3.1 库下载地址

  Jackson https://github.com/FasterXML/jackson-core/wiki

   Databind https://github.com/FasterXML/jackson-databind

   Annotations https://github.com/FasterXML/jackson-annotations/wiki

  Jackson doc https://github.com/FasterXML/jackson-docs

  3.2.生成对象。

 

 Person person=new Person();
		 person.setId(1);
		 person.setName("zhangsan");
		 person.setAge(30);
		 ObjectMapper objectMapper = new ObjectMapper();
		 try {
			String json=objectMapper.writeValueAsString(person);
			System.out.println(json);
		} catch (JsonProcessingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

   3.3. 结果。

 

 

{"id":1,"name":"zhangsan","age":30}

   3.4. 生成数组。

 

 

 List<Person> list=new ArrayList<Person>();
		 Person person=new Person();
		 person.setId(1);
		 person.setName("zhangsan");
		 person.setAge(30);
		 list.add(person);
		 Person person1=new Person();
		 person1.setId(2);
		 person1.setName("lisi");
		 person1.setAge(20);
		 list.add(person1);
		 Person person2=new Person();
		 person2.setId(3);
		 person2.setName("wangwu");
		 person2.setAge(30);
		 list.add(person1);
		 ObjectMapper objectMapper = new ObjectMapper();
		 try {
			String json=objectMapper.writeValueAsString(list);
			System.out.println(json);
		} catch (JsonProcessingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

 

   3.5.结果。

 

[{"id":1,"name":"zhangsan","age":30},{"id":2,"name":"lisi","age":20},{"id":2,"name":"lisi","age":20}]

 

   3.6.json解析对象。

 

 Person person=new Person();
		 person.setId(1);
		 person.setName("zhangsan");
		 person.setAge(30);
		 ObjectMapper objectMapper = new ObjectMapper();
		 try {
			String json=objectMapper.writeValueAsString(person);
			System.out.println(json);
			Person info=objectMapper.readValue(json, Person.class);
			System.out.println(info.toString());
		} catch (JsonProcessingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

 

   3.7结果。

 

{"id":1,"name":"zhangsan","age":30}
Person [id=1, name=zhangsan, age=30]

 

   3.8.json解析数组。

 

 List<Person> list=new ArrayList<Person>();
		 Person person=new Person();
		 person.setId(1);
		 person.setName("zhangsan");
		 person.setAge(30);
		 list.add(person);
		 Person person1=new Person();
		 person1.setId(2);
		 person1.setName("lisi");
		 person1.setAge(20);
		 list.add(person1);
		 Person person2=new Person();
		 person2.setId(3);
		 person2.setName("wangwu");
		 person2.setAge(30);
		 list.add(person1);
		 ObjectMapper objectMapper = new ObjectMapper();
		 try {
			String json=objectMapper.writeValueAsString(list);
			System.out.println(json);
			Person[] persons=objectMapper.readValue(json, Person[].class);
			for (Person info:persons) {
				System.out.println(info.toString());
			}
		} catch (JsonProcessingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

   3.9结果。

 

 

 

 

[{"id":1,"name":"zhangsan","age":30},{"id":2,"name":"lisi","age":20},{"id":2,"name":"lisi","age":20}]
Person [id=1, name=zhangsan, age=30]
Person [id=2, name=lisi, age=20]
Person [id=2, name=lisi, age=20]

 

四.总结。

    如果你在开发的时候没有使用第三库去解析JSON,那么解析过程是很繁琐的。使用第三方库后,解析就很方便快捷。(建议大家在解析JSON数据时,先尽量不要使用第三方库,而使用SDK提供的API去解析数据,这样你对JSON数据以及SDK都会了解的更深刻)

PS:比起XML,JSON的主要优势在于它的体积更小,在网络上传输的时候可以更省流量,但缺点在于,它的语义较差,看起来不如XML直观。

PS:示例代码连接

       推荐文章, java web开发(一) 环境搭建 

                           JSON 解析

                           Android学习资料整理

                          json格式化工具 

帮助文档:JSON 入门指南

                    JSON中文网

               

最近才开通了微信公众号,欢迎大家关注。

 
  • 57
    点赞
  • 298
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
DREAMPlace是一个开源的芯片布局布线工具,其json数据文件用于描述电路设计中的物理布局和布线,其结构如下: ```json { "dieArea": [ [x1, y1], [x2, y2] ], "tracks": [ { "layer": "M1", "start": 0, "num": 20, "step": 2, "origin": [0, 0] }, { "layer": "M2", "start": 0, "num": 10, "step": 1, "origin": [0, 0] } ], "gcells": [ { "id": 0, "lx": 0, "ly": 0, "width": 10, "height": 10, "site": 0, "orient": "N" }, { "id": 1, "lx": 0, "ly": 10, "width": 10, "height": 10, "site": 0, "orient": "N" } ], "nets": [ { "name": "net1", "connected_pins": [ { "id": 0, "node": 0 }, { "id": 1, "node": 0 } ], "weight": 1 }, { "name": "net2", "connected_pins": [ { "id": 2, "node": 0 }, { "id": 3, "node": 0 } ], "weight": 1 } ], "pins": [ { "id": 0, "net_id": 0, "gcell_id": 0, "layer": "M1", "orient": "N", "pos": [0, 0] }, { "id": 1, "net_id": 0, "gcell_id": 1, "layer": "M1", "orient": "N", "pos": [0, 10] }, { "id": 2, "net_id": 1, "gcell_id": 0, "layer": "M1", "orient": "N", "pos": [10, 0] }, { "id": 3, "net_id": 1, "gcell_id": 1, "layer": "M1", "orient": "N", "pos": [10, 10] } ] } ``` 其中,`dieArea`表示芯片的边界框;`tracks`表示布线的水平或垂直轨道;`gcells`表示物理单元格,即芯片中的基本单位;`nets`表示电路中的连线;`pins`表示端口,即与外部连接的引脚。 `tracks`中的每个元素包含以下属性: - `layer`: 轨道所在的层,如M1、M2等; - `start`: 轨道的起始索引; - `num`: 轨道数量; - `step`: 轨道之间的间距; - `origin`: 轨道的坐标原点。 `gcells`中的每个元素包含以下属性: - `id`: 单元格的唯一标识符; - `lx`: 单元格左下角的x坐标; - `ly`: 单元格左下角的y坐标; - `width`: 单元格的宽度; - `height`: 单元格的高度; - `site`: 单元格所在的站点; - `orient`: 单元格的方向。 `nets`中的每个元素包含以下属性: - `name`: 连线的名称; - `connected_pins`: 连线所连接的引脚; - `weight`: 连线的权重。 `pins`中的每个元素包含以下属性: - `id`: 引脚的唯一标识符; - `net_id`: 引脚所连接的连线; - `gcell_id`: 引脚所在的单元格; - `layer`: 引脚所在的层; - `orient`: 引脚的方向; - `pos`: 引脚的坐标。
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值