java操作json数据之net.sf.json-lib
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标签中添加
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>

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<Student> list= new ArrayList<Student>();
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<Student> listBean = (List<Student>) 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可以是字符串和Object
Object 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","");

