0%

JSON

JSON

地位

数据传输的一种格式

特点

UTF-8 Only

语法简单,key只能是字符串

浏览器认识JSON,可以转为js对象

  • 开发web应用的不二之选

支持的数据类型

键值对

数组

字符串

数值

布尔值

空值null

用java读写JSON

测试函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package eternal.fire;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;

import java.io.IOException;
import java.io.InputStream;

public class Main {
public static void main(String[] args) throws IOException {
InputStream inputStream = Main.class.getResourceAsStream("/book.json");
ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule());
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Book book = objectMapper.readValue(inputStream, Book.class);
System.out.println(book.pubDate);
System.out.println(book.price);
System.out.println(book.isbn);
String json = objectMapper.writeValueAsString(book);
System.out.println(json);
}
}

自定义解析规则

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package eternal.fire;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;

import java.io.IOException;
import java.math.BigInteger;

public class IsbnDeserializer extends JsonDeserializer<BigInteger> {
@Override
public BigInteger deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
String str = jsonParser.getValueAsString();
if (str != null) {
return new BigInteger(str.replace('-', ' '));
}
return null;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Java Bean

package eternal.fire;

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.LocalDate;
import java.util.List;

public class Book {
public long id;
public String name;
public String author;
@JsonDeserialize(using = IsbnDeserializer.class)
public BigInteger isbn;
public List<String> tags;
public LocalDate pubDate;
public BigDecimal price;
}

要解析的JSON

1
2
3
4
5
6
7
8
9
{
"id": 1,
"name": "Java核心技术",
"author": "Cay S. Horstmann",
"isbn": "978-7-111-54742-6",
"tags": ["Java", "Network"],
"pubDate": "2016-09-01",
"price": 119.5
}

反序列化

  • JSON转化为一般的java对象
  • JSON转化为特殊的java对象,例如LocalTime
  • 自定义解析规则

序列化

  • 自定义解析规则