1 json简介
json全称javascript object notation,即js对象表示法
json概述:
- json是轻量级的文本数据交换格式
- json使用js语法来描述数据对象,但json独立于语言和平台,json解析器和json库可支持不同的编程语言
- json具有自我描述性,易于理解
json语法:
- 对象由
{}
表示 - 数组由
[]
表示 - 数据形式为
key-value
形式 - 数据之间
,
分隔
json值:
- 数字(整数或浮点类型)
- 字符串(
""
表示) - 逻辑(
true
、false
) - 数组
- 对象
null
json obj demo:
{ // employees对象
"employees":[ // 员工集合,数组
{ // 员工对象
"name":"tom",
"age":11
},
{
"name":"cat",
"age":12
},
{
"name":"thomas",
"age":20
}
]
}
json obj in JavaScript demo
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>jsonDemo</title>
<script>
function clickMe1() {
// 直接操作json对象
let book = {
"jid":"10001",
"jname":"java programming",
"jprice":99.9,
"jauthor":"lg"
};
document.getElementById("jid").innerHTML=book.jid;
document.getElementById("jname").innerHTML=book.jname;
document.getElementById("jprice").innerHTML=book.jprice;
document.getElementById("jauthor").innerHTML=book.jauthor;
}
function clickMe2() {
// 字符串转json对象,字符串可以是服务端返回的值
let jsonStr = "{\n" +
" \"jid\":\"10002\",\n" +
" \"jname\":\"json programming\",\n" +
" \"jprice\":100,\n" +
" \"jauthor\":\"tt\"\n" +
" }";
let book = eval("(" + jsonStr + ")");
document.getElementById("jid").innerHTML=book.jid;
document.getElementById("jname").innerHTML=book.jname;
document.getElementById("jprice").innerHTML=book.jprice;
document.getElementById("jauthor").innerHTML=book.jauthor;
}
</script>
</head>
<body>
<h2>js创建json对象</h2>
<p>
id:<span id="jid"></span><br>
name:<span id="jname"></span><br>
price:<span id="jprice"></span><br>
author:<span id="jauthor"></span><br>
</p>
<input type="button" onclick="clickMe1()" value="获取json对象1">
<input type="button" onclick="clickMe2()" value="获取json对象2">
</body>
</html>
2 gson
gson是google提供的java对象和json数据之间进行映射的java类库
下面是gson格式转换的几个demo:
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.my4tb.jsonBean.Book;
import org.junit.BeforeClass;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class TestJson {
private static Gson gson;
@BeforeClass
public static void beforeClass() {
gson = new Gson();
}
// str 2 gson
@Test public void test1() {
// jsonStr
String jsonStr = "{\n" +
" \"id\":\"10001\",\n" +
" \"name\":\"java programming\",\n" +
" \"price\":99.9,\n" +
" \"author\":\"lg\"\n" +
" }";
// convert
Book book = gson.fromJson(jsonStr, Book.class);
// print
System.out.println("book = " + book);
}
// gson 2 str
@Test public void test2() {
// obj
Book book = new Book("10001", "java programming", 100d, "my");
String jsonStr = gson.toJson(book);
System.out.println("jsonStr = " + jsonStr);
}
// gson 2 str for list
@Test public void test3() {
List<Book> books = new ArrayList<>();
for (int i = 0; i < 3; i++) {
Book book = new Book("id" + i, "java programming" + i, (double) i, "my" + i);
books.add(book);
}
String jsonStr = gson.toJson(books);
System.out.println("jsonStr = " + jsonStr);
}
// gson 2 list obj
@Test public void test4() {
new ArrayList<Integer>() {};
String gsonStr =
"[{\"id\":\"id0\",\"name\":\"java programming0\",\"price\":0.0,\"author\":\"my0\"}," +
"{\"id\":\"id1\",\"name\":\"java programming1\",\"price\":1.0,\"author\":\"my1\"}," +
"{\"id\":\"id2\",\"name\":\"java programming2\",\"price\":2.0,\"author\":\"my2\"}]";
List<Book> books = gson.fromJson(gsonStr, new TypeToken<List<Book>>() {}.getType());
System.out.println("books = " + books);
}
}