多语言展示
当前在线:310今日阅读:176今日分享:34

java操作json数据之net.sf.json-lib

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
工具/原料
1

电脑

2

intellij IDEA或者eclipse

方法/步骤
1

第一步骤:创建一个java项目。1、file--》new--》project...或者Model...打开创建窗口2、选择创建的项目为spring initializr 进入springboot项目创建步骤(也可以选择类型java,创建一个普通java web项目)3、输入项目名字,选择依赖web(如果不需要可以不选),选择存放目录-完成(Finish)

2

第二步骤:在pom.xml中添加net.sf.json-lib依赖如下所示:在pom.xml文件的dependencies标签中添加    net.sf.json-lib    json-lib    2.4    jdk15

3

第三步骤:编写代码。1、编写实体类:Student get和set方法自己生成public class Student {    private int id;    private String name;    private String sex;}2、编写测试代码:2.1需要引入jar包import net.sf.json.JSONObject;2.2关键代码public static void testObject(){    Student st = new Student();    st.setId(1);    st.setName('张三');    st.setSex('男');    //转为json对象    JSONObject json = JSONObject.fromObject(st);    System.out.println(json);    //转为json字符串    System.out.println(json.toString())    //将json字符串转为json对象    JSONObject jsonStr = JSONObject.fromObject(json.toString());    //获得json数据    Object obj = JSONObject.toBean(jsonStr,Student.class);    Student st2 = (Student) obj;    System.out.println(st2.getSex());}3、测试代码功能。3.1首先创建一个实体类,并给属性复制,先实现将实体类转为json对象,转为json字符串的功能。3.2 再实现将一个json字符串转为具体的实体类的功能。3.3 可以将使用map集合代替实体类实现同样效果。

4

第四步骤:List集合的json操作。具体代码如下所示:4.1 需要引入:import net.sf.json.JSONArraimport java.util.ArrayList;import java.util.List;4.2 关键代码:public static void testList(){    //将集合对象转为json对象,json字符串    List list= new ArrayList();    Student st = new Student();    st.setId(1);    st.setName('张三');    st.setSex('男');    Student st2 = new Student();    st2.setId(2);    st2.setName('小丽');    st2.setSex('女');    list.add(st);   list.add(st2);    //将类转为json对象    JSONArray array=JSONArray.fromObject(list);    System.out.println(array.toString());    //将json对象转为对应的集合类    JSONArray arrayBean = JSONArray.fromObject(array.toString());    List listBean = (List) JSONArray.toCollection(arrayBean,Student.class);    //输出转换后的结果    for (Student lst: listBean) {        System.out.println('name:'+lst.getName());    }}

5

第五步骤:多层实体类处理。1、实体类:set和get方法自己生成(set和get方法必须有)public class Person     private String id;    private Person pserson;}2、关键测试代码:实体类Person 属性还是Person 时json解析为实体类时一次搞定。import net.sf.json.JSONObject;public static void main(String[] args) {    Person p1 = new Person();    p1.setId('111');    Person p2 = new Person();    p2.setId('222');    Person p3 = new Person();    p3.setId('333');    p1.setPserson(p2);    p2.setPserson(p3);    JSONObject jsonp = JSONObject.fromObject(p1);    System.out.println(jsonp);    Object objp = JSONObject.toBean(jsonp,Person.class);    Person p4 = (Person) objp;    Person p5 =  p4.getPserson();    Person p6 =  p5.getPserson();    System.out.println(p6.getId());}3、map属性中存放map时比较麻烦需要使用MorphDynaBean 或者get一次解析一次。public static void main(String[] args) {    Map map1 = new HashMap();    Map map2 = new HashMap();    Map map3 = new HashMap();    map3.put('value','Male');    map2.put('gender',map3);    map1.put('attributes',map2);    JSONObject json = JSONObject.fromObject(map1);    System.out.println(json);    Object obj2 = JSONObject.toBean(json,Map.class);    Map map = (Map) obj2;    MorphDynaBean map4 = (MorphDynaBean) map.get('attributes');    MorphDynaBean map5 = (MorphDynaBean) map4.get('gender');    String male = (String) map5.get('value');    System.out.println(male);    //或者使用get一次解析一次    JSONObject json3 = JSONObject.fromObject(json.get('attributes'));    Map map6 = (Map) JSONObject.toBean(json3,Map.class);    JSONObject json4 = JSONObject.fromObject(json3.get('gender'));    Map map7 = (Map) JSONObject.toBean(json4,Map.class);    System.out.println(map7.get('value'));}

6

第六步骤:net.sf.json-lib常用知识点。5.1:net.sf.json.JSONObject常用方法:JSONObject json = JSONObject.fromObject(st);//根据key可以获得一个Object对象,key可以是字符串和ObjectObject obj = json.get('key');//根据key可以获得一个布尔值,key是一个字符串Boolean bo = json.getBoolean('key');还有一下这些,都是根据key返回具体的类型的数据。json.getString('key');json.getInt('key');json.getDouble('key');json.getJSONArray('key');json.getJSONArray('key');json.getLong('key');这些get开头的根据key获取value的方法如果key不存在会报错实际使用效果不是特别好。可以考虑opt开头的方法,当key不存在时返回默认值,或者自定义需要返回的内容。如下json.opt('key');json.optInt('key');json.optInt('key',0);json.optString('key');json.optString('key','');

注意事项
1

实体类的属性一定要有对应的set和get方法否则,转换时对应的属性数据会丢失。

2

开发环境jdk1.8 IDEA2018.2.2 maven apache-maven-3.5.4

3

普通java项目手动下载:json-lib.jar添加依赖

推荐信息