JSON的简介和在Java中的使用

来源:互联网 发布:剑三叽太捏脸数据 编辑:程序博客网 时间:2024/05/22 02:17

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

JSON建构于两种结构:

  • “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
  • 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。

JSON具有以下这些形式:

对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

值(value)可以是双引号括起来的字符串(string)、数值(number)、truefalse、 null、对象(object)或者数组(array)。这些结构可以嵌套。

一个简单的JSON实例

{    "name": "hello",    "age": 12,    "isNonProfit": true,    "address": {        "city": "浙江杭州",        "country": "中国"    },    "links": [        {            "name": "Google",            "url": "http://www.google.com"        },        {            "name": "Baidu",            "url": "http://www.baidu.com"        }    ]}

一、在JavaScript中

1.常见的两种结构:对象和数组


2.数据访问

在js对象中可以利用"."操作符直接取名称对应的值,而数组的索引是从零开始



3.在数据传输中,json是以字符串的形式传递的,而JS操作的是JSON对象,所以,需要JSON对象和JSON字符串之间的相互转换

json字符串转换为json对象





json对象转换为json字符串



二、在Java中的使用

先在maven中引入jackson

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.tedu.ajax</groupId><artifactId>ajax</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><dependencies><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.2.3</version></dependency></dependencies></project>

定义一个Student类

public class Student implements Serializable {private static final long serialVersionUID = 1L;private String name;private int age;private String address;private String email;public Student() {}public Student(String name, int age, String address, String email) {super();this.name = name;this.age = age;this.address = address;this.email = email;}//Getters,Setters和toString()方法省略}

1.json字符串转换为Java对象

@Testpublic void test1() throws Exception{String json = "{\"name\":\"Jack\",\"age\":18,\"address\":\"China\"}";System.out.println(json);ObjectMapper mapper = new ObjectMapper();//Student必须有无参构造Student student = mapper.readValue(json, Student.class);System.out.println(student);}

结果:


这里json字符串少写了Student中的email属性,根据结果可知readValue()方法,会填充名称相同的属性,对于json中有而实体类中没有的属性,会设置为null.也可以测试对于实体类中没有,而json中有的属性或者名称不同,会抛出异常



2.json对象转化为字符串

@Testpublic void test2() throws JsonProcessingException{Student student = new Student("Tom", 23, "USA","tom@123.com");ObjectMapper mapper = new ObjectMapper();String str = mapper.writeValueAsString(student);System.out.println(str);}
结果:



参考:http://www.json.org/