1.JSON介绍
(1)JSON是一种与开发语言无关的,轻量级的数据格式,全称 JavaScript Object Notation,易于阅读和编写,语言解析和生产
(2)JSON数据类型表示
数据结构:Map、Array
基本类型:String、number、true、false、null
Map:
使用花括号 {} 标识的键值对结构,key必须是String类型,value为任何基本类型或数据结构
Array:
使用中括号 [] 来起始,并用逗号来分割元素,元素可以是任何类型,就是普通意义上的数组
基本类型:待续。。。。
(3)JSON数据演示:
{
"name":“王小二” ,
"age" :25 ,
"birthday" :"1995-01-01" ,
"project" :["理发","挖掘机"] ,
"hasGrilfriend" : false ,
"house":false ,
"car" :{ }
}
注 : JSON里面没有日期或时间这类数据格式 ,所有的key使用String类型
-
数据在键值对中
-
数据由逗号分隔
-
花括号保存对象
-
方括号保存数组
(4)JSON的使用
方法JSONObject不规范,我们可以 单击右键使用Refactor中的rename修改方法名,方便地进行同步修改,所有被引用的地方都会被同步改写
JSON Editor Online生成结果:
(5)使用HashMap够建JSON
(6)使用Java Bean创建JSON
Java Bean即一个实体对象(C#中的叫法),可以重用
(7)解析JSON
从文件中读取JSON(依赖 commons-io)(待续。。。。。。。http://www.imooc.com/video/12680 慕课网视频)
(8)说一说 TypeToken 吧
GSON提供了 TypeToken 这个类来帮助我们捕获像List<MyZhuiHaoDetailModel>这样的泛型信息。
private List<MyZhuiHaoDetailModel> listLottery = new ArrayList<MyZhuiHaoDetailModel>();
Gson gson=new Gson();
listLottery = gson.fromJson(object.getString("lists"),
new TypeToken<List<MyZhuiHaoDetailModel>>() { }.getType());
上文创建了一个匿名内部类,这样,Java编译器就会把泛型信息编译到这个匿名内部类里,然后在运行时就可以被 getType()方法用反射API提取到。
下面来看看gson的反序列化,Gson提供了fromJson()方法来实现从Json相关对象到java实体的方法。我们一般都会碰到两种情况,转成单一实体对象和
转换成对象列表或者其他结构。
eg:
》转成单一实体对象:
json字符串为:{"name":"name0","age":0}
代码:需要提供两个参数,分别是json字符串以及需要转换对象的类型。
Person person = gson.fromJson(str, Person.class);
》转换成对象列表
List<Person> ps = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());
for(int i = 0; i < ps.size() ; i++)
{
Person p = ps.get(i);
System.out.println(p.toString());
}
注:如果我没有写大括号{};就是TypeToken<List<Person>>()后面的这个{},表示很普通的new一个对象,如果那个类的构造方法是私有的,
肯定不能直接new了,否则就会编译报错。加上大括号表示你new了一个匿名内部类的对象,比如new TypeToken<List<Person>>(){},这个匿名内部
类继承自TypeToken类。。你可以在大括号里面像写其他普通类代码一样随意写代码。。你可以在里面定义个方法等等。。
《匿名内部类》
比如我们给一个按钮加监听。。比如
JButton btn = new JButton("test");
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
btn.addActionListener()方法接受的是一个ActionListener类型的对象。。而ActionListener是一个接口。。不能直接new。。所以本来我们应该写一个类实现
ActionListener接口。。然后这里给他传一个那个实现类的对象。。但是。。我们不想那么麻烦了。。因为这种情况太多。。所以我们直接在这里创建了那个类。。
之所以叫匿名。。就是我们没有给他取名字就让他叫ActionListener接口的名字。。然后在这里实现那个方法。。
待续。。。。。。
Newtonsoft.Json是支持序列化和反序列化DataTable,DataSet,Entity Framework和Entity的。
C# 中后台传json数据给前台时:
1.OptOut 类中所有公有成员会被序列化,如果不想被序列化,可以用特性JsonIgnore
2.OptIn 所有的成员不会被序列化,类中的成员只有标有特性JsonProperty的才会被序列化,当类的成员很多,但客户端仅仅需要一部分数据时,很有用
3. JsonProperty 实体中定义的属性名可能不是自己想要的名称,但是又不能更改实体定义,这个时候可以自定义序列化字段名称。