JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
一、JSON数据的语法
以键值对方式的存在,键与值之间,冒号分割,数据由都好进行分割,花括号保存对象,方括号保存数组
在键值对中值可以使用如下的数据:
字符串(在双引号中)
逻辑值(true 或 false)
数组(在方括号中)
对象(在花括号中)
null
常见的两种数据格式:
JSON对象
JSON对象可以在花括号中书写,对象中可以包含多个键值对
{ "firstName":"John" , "lastName":"Doe" }
JSON数组
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
var employees = [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName": "Carter" }
];
可以像这样访问 JavaScript 对象数组中的第一项:employees[0].lastName;
返回的内容是:Gates
可以像这样修改数据:employees[0].lastName = "Jobs";
或者使用循环遍历,增加if判断取出自己需要的数据,但是大部分情形下需要将json转换为对象,获取对象的属性。
二、JSON数据和对象相互转换:
可以选择很多的三方库,比如神器Gson、阿里的fastJson、jackjson,关于不同Json三方库的选择和比较,在网上有很多内容,,可参考https://blog.csdn.net/vickyway/article/details/48157819的博客,根据自己的情况选择,最终选择了阿里的fastJson.
以前觉得Json和Object的转换很简单,只要调用三方库的给出方法就可以,在自己操作中,遇到一些问题,发现还是比较菜,这个先不管,慢慢学习,先上手操作再说。
转换关系:JSON格式的字符串与JSON对象、Javabean对象之间的转换
JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。
JSONObject:fastJson提供的json对象。
JSONArray:fastJson提供json数组对象。
我们可以把JSONObject当成一个Map<String,Object>来看,只是JSONObject提供了更为丰富便捷的方法,方便我们对于对象属性的操作。
同样我们可以把JSONArray当做一个List<Object>,可以把JSONArray看成JSONObject对象的一个集合。
此外,由于JSONObject和JSONArray继承了JSON,所以说也可以直接使用两者对JSON格式字符串与JSON对象及javaBean之间做转换,不过为了避免混淆我们还是使用JSON。
首先 要将对象转化为JSON数据格式,对象的对应的类必须有set()和get()方法,否则转换的JSON串显示为{ },没有内容
其次倒包操作就不说了
然后上转换的方法
package com.niuguwang.json;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.serializer.SimplePropertyPreFilter;
public class FirstFastJson {
public static void main(String[] args){
/*普通对象转换为JSON格式的字符串*/
person p1= new person("小明", "河北",24);
String jp1=JSON.toJSONString(p1);
System.out.println(jp1);
/*字符串转换为对象
*但是在后面的转换中,从字符串直接转换为复杂的对象时报错,待查看
* */
person po =JSON.parseObject(jp1, person.class);
System.out.println(po.getAge());
/*字符串转换为JSON对象
* */
JSONObject pjo =JSON.parseObject(jp1);
System.out.println(pjo.getString("name"));
student s1 =new student("嚣张", 85);
student s2 =new student("赵六", 90);
student s3 =new student("孙琦", 100);
student[] s={s1,s2,s3};
System.out.println("数组s"+s);
teacher t1=new teacher("数学",35,s);
teacher t2=new teacher("语文",50,s);
teacher[] t ={t1,t2};
System.out.println("数组t"+t);
person p2=new person("json", "shandong", 12);
person[] p={p1,p2};
System.out.println("数组p"+p);
studyclass studyclass=new studyclass(t, p,"文明先进班级");
System.out.println("初始化对象完成");
// SimplePropertyPreFilter filter = new SimplePropertyPreFilter(teacher.class, "s");
// String classjson = JSON.toJSONString(studyclass,filter,SerializerFeature.DisableCircularReferenceDetect);
// String classjson =JSON.toJSONString(studyclass);
String classjson =JSON.toJSONString(studyclass, SerializerFeature.DisableCircularReferenceDetect);
System.out.println(classjson);
/*将字符串转换为JSON对象*/
JSONObject studyclass2=JSON.parseObject(classjson);
System.out.println(studyclass2.getString("classname"));
System.out.println(studyclass2.getJSONArray("p"));
/*通过关键字获取JSONArray*/
JSONArray ja = studyclass2.getJSONArray("p");
System.out.println(ja.get(1));
/*通过index获取JSONObject*/
JSONObject jas=ja.getJSONObject(1);
System.out.println(jas.getString("name"));
}
}
class person{
String name;
String adrees;
int age;
public person() {
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "person [name=" + name + ", adrees=" + adrees + ", age=" + age + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAdrees() {
return adrees;
}
public void setAdrees(String adrees) {
this.adrees = adrees;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public person(String name, String adrees, int age) {
this.name = name;
this.adrees = adrees;
this.age = age;
}
}
class teacher{
String xuke;
int age;
student[] s;
public teacher(String xuke, int age, student[] s) {
this.xuke = xuke;
this.age = age;
this.s = s;
}
public teacher(String xuke, int age) {
this.xuke = xuke;
this.age = age;
}
public final String getXuke() {
return xuke;
}
public final void setXuke(String xuke) {
this.xuke = xuke;
}
public final int getAge() {
return age;
}
public final void setAge(int age) {
this.age = age;
}
public final student[] getS() {
return s;
}
public final void setS(student[] s) {
this.s = s;
}
}
class student{
String name;
int chengji;
public student(String name, int chengji) {
this.name = name;
this.chengji = chengji;
}
public final String getName() {
return name;
}
public final void setName(String name) {
this.name = name;
}
public final int getChengji() {
return chengji;
}
public final void setChengji(int chengji) {
this.chengji = chengji;
}
}
class studyclass{
teacher[] t;
person[] p;
String classname;
public void xuexi(){
System.out.print("班级有班级学习很好");
}
public studyclass(teacher[] t, person[] p, String classname) {
this.t = t;
this.p = p;
this.classname = classname;
}
public final teacher[] getT() {
return t;
}
public final void setT(teacher[] t) {
this.t = t;
}
public final person[] getP() {
return p;
}
public final void setP(person[] p) {
this.p = p;
}
public final String getClassname() {
return classname;
}
public final void setClassname(String classname) {
this.classname = classname;
}
}
参考了博客https://www.cnblogs.com/cdf-opensource-007/p/7106018.html