@File
2019-08-08T07:49:55.000000Z
字数 4373
阅读 283
test java
lidaye.ljson.* 简述
ljson 是一个简单的 json 数据处理类,基于
List和Map作为转换对象封装而成
内置:Json父类、JsonMap子类、JsonList子类、LJson对象、ILJson接口
注解(供 lmysql 使用):@Table表名、@DbField字段名
public abstract class Json
Json是一个抽象类,平时不直接使用。public class JsonMap extends Json
JsonMap用于处理Map对象的转换和解析
// map对象转换为json字符串public static String encode(Map map)// ILJson 实例对象转json字符串public static String encode(ILJson obj)// json字符串转为Map对象public static LJson decode(String json)
public class JsonList extends Json
JsonMap用于处理List对象的转换和解析
// list对象转换为json字符串public static String encode(List list)// json字符串转为List对象public static LJson decode(String json)
public class LJson<T>
LJson是两个子类在decode()时返回的结果对象基本用法
1.public LJson(T obj)通过 List/Map 转换成 LJson 对象
2.public T getObj()取结果对象的源对象 List/Map
3.public Object get(Object... keys)通过传入多个参数,依次深入(维度)取值
// 暂时不支持自定义对象取值(实现 ILJson 的对象)// 第一维 listList list = new ArrayList();// 第二维 mapMap mao = new HashMao();map.put("a","array"); // 二维的值// 复制个一维 listlist.add(map);// 转换成 LJsonLJson<List> ljson = new LJson<>(list);// 用 get 方法取值System.out.println(ljson.get(0,"a")); // array
public interface ILJson
ILJson用于调用encode()时传入自定义对象必须实现的接口自定义规范
public class User implements ILJson{ // 必须实现 ILJsonprivate String name;private int age;private char sex;public User(name,age,sex){this.name = name;this.age = age;this.sex = sex;}//必须有 get和set 方法public String getName(){return name;}public void setName(String name){this.name = name;}public int getAge(){return age;}public void setAge(int age){this.age = age;}public char getSex(){return sex;}public void setSex(char sex){this.sex = sex;}}
@Table 用来定义类所映射的 数据表@DbField 用来定义属性所对应的 字段名
@Table("user") // 表名注解public class User implements ILJson{ // 必须实现 ILJson// 字段名注解,用于LMysql识别属性所对应的字段名// 主键注解的属性会被 新增、修改 忽略@DbField(value="uid",cst=Constraint.PRIMARY) // 主键字段private int id;@DbField("user_name") // 字段名private String name;@DbField("age") // 字段名private int age;@DbField("sex") // 字段名private char sex;public User(name,age,sex){this.name = name;this.age = age;this.sex = sex;}//必须有 get和set 方法public int getId(){return id}public void setId(int id){this.id = id;}public String getName(){return name;}public void setName(String name){this.name = name;}public int getAge(){return age;}public void setAge(int age){this.age = age;}public char getSex(){return sex;}public void setSex(char sex){this.sex = sex;}}
注意:自定义对象除了需要实现ILJson之外,还需要是一个规范的带有getxxx()方法的类,否则无法读取
ILJson接口拓展
1.default Map getParam()获取实现接口的对象的所有属性和值
2.default boolean set(String,String)修改指定属性的值
// 一个规范实现了ILJson接口的类User user = new User("李大爷",25,"男");// 通过 set() 修改属性值user.set("age","18");// 通过 getParam() 取所有的属性Map params = user.getParam();System.out.println(params);// {name=李大爷,age=18,sex=男}
import ljson.ILJson;public class testMap implements ILJson {private String a;private int b;private String c;public testMap(String a, int b, String c) {this.a = a;this.b = b;this.c = c;}public String getA() {return a;}public int getB() {return b;}public String getC() {return c;}}
List list = new ArrayList(); // 创建一个List对象list.add(new testMap("1",2,"3")); // 添加自定义对象list.add(666); // 添加值list.add("哈哈哈"); // 添加值// 调用 JsonList.encode 转换String json = JsonList.encode(list);System.out.println(json);// [{"a":"1","b":2,"c":"3"},666,"\u54c8\u54c8\u54c8"]
Map map = new HashMap(); // 创建一个Map对象map.put("self",new testMap("1",2,"3")); // 添加自定义对象map.put("name","李大爷"); //添加值map.put("age",18); // 添加值// 调用 JsonMap.encode 转换String json = JsonMap.encode(map);// 也可以对象转jsonString json2 = JsonMap.encode(new testMap("2",3,"4"));System.out.println(json);// {"name":"\u674e\u5927\u7237","self":{"a":"1","b":2,"c":"3"},"age":18}System.out.println(json2);//{"a":"1","b":2,"c":"3"}
// json字符串String json = "[{\"a\":\"1\",\"b\":2,\"c\":\"3\"},666,\"\u54c8\u54c8\u54c8\"]";// 调用 JsonList.decode 转换LJson ljson = JsonList.decode(json);// 通过 LJson.get 取值int num = (int)ljson.get(1); // 下标为1String str = (String)ljson.get(0,"a"); // 下标为0里key为aSystem.out.println(num); // 666System.out.println(str); // 1System.out.println(ljson);// [{a=1, b=2, c=3}, 666, 哈哈哈]
// json 字符串String json = "{\"name\":\"\u674e\u5927\u7237\",\"self\":{\"a\":\"1\",\"b\":2,\"c\":\"3\"},\"age\":18}";// 调用 JsonMap.decode 转换LJson ljson = JsonMap.decode(json);// 通过 LJson.get 取值int num = (int)ljson.get("age"); // key为ageString str = (String)ljson.get("self","c"); // key为self里key为cSystem.out.println(num); // 18System.out.println(str); // 3System.out.println(ljson);// {name=李大爷, self={a=1, b=2, c=3}, age=18}