JSON总结
程序员文章站
2022-03-01 15:45:14
...
目录
1.JSON简介
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。它是基于 JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999 的一个子集。 JSON采用完全独立于程序语言的文本格式,但是也使用了类C语言的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
2.JSON的三种格式
2.1对象格式
{“key”:value,”key”:value},
如:{“id”:2017,“name”:”me”}
2.2数组格式
[value,value,value]
如:[“北京”,”上海”,”深圳”,”广州”]
2.3嵌套格式
[{key:value},{key:value}]
{key:[ {key:value},{key:value}]}
如:[{“id”:2017,“name”:”me”},{“id”:2018,“name”:”you”}]
如:{“address”:[“长沙”,”广州”]}
3.java中常用的JSON工具
1、JSON官方
2、GSON谷歌谷歌谷歌
3、FastJSON是阿里巴巴的产品,效率最高
4、jackson ,SpringMVC内置的解析器
3.1原生JSON
public class JOSNTest {
//解析JSON
@Test
public void test1() throws JSONException {
//对象嵌套数组
String json1 = "{'id':1,'name':'JavaEE','stus':[{'id':'110','name':'luo'}]}";
//数组
String json2 = "['北京','广州','深圳']";
//解析第一层--对象
JSONObject jobject = new JSONObject(json1);
int id = jobject.getInt("id");
String name = jobject.getString("name");
System.out.println(id+","+name);
//接下第二层--数组
JSONArray jsonArray = jobject.getJSONArray("stus");
//遍历数组获取元素
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jobject2 = jsonArray.getJSONObject(i);
int id2 = jobject2.getInt("id");
String name2 = jobject2.getString("name");
System.out.println(id2+":"+name2);
}
System.out.println("===============");
//通过迭代器对象遍历
// Iterator<String> iterator = jobject.keys();
// while (iterator.hasNext()) {
// String key = iterator.next();
// Object value = jobject.get(key);
// System.out.println(key+":"+value);
// }
//获取数组对象
JSONArray jArray = new JSONArray(json2);
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < jArray.length(); i++) {
list.add(jArray.getString(i));
}
System.out.println("解析结果:"+list);
}
//生成JSON
@Test
public void test2() throws JSONException {
JSONObject jo1=new JSONObject();
jo1.put("name", "luo");
jo1.put("age", 123);
JSONObject jo2 = new JSONObject();
jo2.put("name", "pei");
jo2.put("age", 56);
JSONArray jo3 = new JSONArray();
jo3.put(jo1);
jo3.put(jo2);
String jString = jo3.toString();
System.out.println(jString);
}
}
3.2GSON
public class GSONTest {
//解析
@Test
public void test1() {
// 对象嵌套数组嵌套对象
String json1 = "{'id':1,'name':'JAVAEE-1703','stus':[{'id':101,'name':'刘一','age':16}]}";
// 数组
String json2 = "['北京','天津','杭州']";
Gson gson=new Gson();
//1、
//解析对象:第一个参数:待解析的字符串 第二个参数结果数据类型的Class对象
Grade grade=gson.fromJson(json1, Grade.class);
System.out.println(grade);
//2、
//解析数组要求使用Type
ArrayList<String> list=gson.fromJson(json2,
new TypeToken<ArrayList<String>>(){}.getType());
System.out.println(list);
}
//生成
@Test
public void test2(){
ArrayList<Student> list=new ArrayList<>();
for(int i=1;i<3;i++){
list.add(new Student(101+i, "码子", 20+i));
}
Grade grade=new Grade(100001,"张三", list);
Gson gson=new Gson();
//将对象转换为诶JSON格式字符串
String json=gson.toJson(grade);
System.out.println(json);
}
}
3.3FastJSON
public class FASTJson {
//解析
@Test
public void test1() {
// 对象嵌套数组嵌套对象
String json1 = "{'id':1,'name':'JAVAEE-1703','stus':[{'id':101,'name':'刘铭','age':16}]}";
// 数组
String json2 = "['北京','天津','杭州']";
//1、
//静态方法
Grade grade=JSON.parseObject(json1, Grade.class);
System.out.println(grade);
//2、
List<String> list=JSON.parseArray(json2, String.class);
System.out.println(list);
}
//生成
@Test
public void test2(){
ArrayList<Student> list=new ArrayList<>();
for(int i=1;i<3;i++){
list.add(new Student(101+i, "码子", 20+i));
}
Grade grade=new Grade(100001,"张三", list);
String json=JSON.toJSONString(grade);
System.out.println(json);
}
}
3.4jackSon解析JSON
public class JackSonTest {
//解析
@Test
public void test1() throws Exception{
// 对象嵌套数组嵌套对象
String json1 = "{\"id\":1,\"name\":\"JAVAEE-1703\",\"stus\":[{\"id\":101,\"name\":\"刘一\",\"age\":16}]}";
// 数组
String json2 = "[\"北京\",\"天津\",\"杭州\"]";
//1、
ObjectMapper mapper=new ObjectMapper();
Grade grade=mapper.readValue(json1, Grade.class);
System.out.println(grade);
//2、
ArrayList<String> list=mapper.readValue(json2,
new TypeReference<ArrayList<String>>() {
});
System.out.println(list);
}
//生成
@Test
public void test2() throws JsonProcessingException{
ArrayList<Student> list=new ArrayList<>();
for(int i=1;i<3;i++){
list.add(new Student(101+i, "码子", 20+i));
}
Grade grade=new Grade(100001,"张三", list);
ObjectMapper mapper=new ObjectMapper();
//将对象转换为JSON格式字符串
String json=mapper.writeValueAsString(grade);
System.out.println(json);
}
}
参考文献:
https://blog.csdn.net/xingfei_work/article/details/76572550