在使用JSONObject.toBean的时候,得到的Bean里面的复杂数据类型( 如果转换的类中有集合)不能转换成需要的对象类型。
java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to ......
package com.edu.xukai; /** * @author xukai * */ public class Student { private String stuNo; private String stuName; public Student() { } public Student(String stuNo, String stuName) { this.stuNo = stuNo; this.stuName = stuName; } // getter setter @Override public String toString() { return "Student [stuNo=" + stuNo + ", stuName=" + stuName + "]"; } }
package com.edu.xukai; import java.util.List; /** * @author xukai * */ public class Teacher { private String teaId; private String teaName; private List<Student> stus; public Teacher() { } public Teacher(String teaId, String teaName, List<Student> stus) { this.teaId = teaId; this.teaName = teaName; this.stus = stus; } //getter setter }
package com.edu.xukai; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONObject; /** * @author xukai * */ public class TestJSONObject { public static void main(String[] args) { Student student_1 = new Student("学号1", "学生1"); List<Student> stus = new ArrayList<Student>(); stus.add(student_1); Teacher teacher_1 = new Teacher("编号1", "教师1", stus); JSONObject obj = JSONObject.fromObject(teacher_1); System.out.println("JSON格式的Teacher->" + obj.toString()); Teacher teacherBean = (Teacher) JSONObject.toBean(obj, Teacher.class); try { Student studentBean = teacherBean.getStus().get(0); System.out.println(studentBean); } catch (Exception e) { System.out.println("出现异常"); e.printStackTrace(); } } }
运行可以看到控制台打印结果:
JSON格式的Teacher->{"stus":[{"stuName":"学生1","stuNo":"学号1"}],"teaId":"编号1","teaName":"教师1"}
出现异常
java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to com.edu.xukai.Student
at com.edu.xukai.TestJSONObject.main(TestJSONObject.java:25)
解决办法:使用JSONObject.toBean(jsonObject, beanClass, classMap)
package com.edu.xukai; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONObject; /** * @author xukai * */ public class TestJSONObject { public static void main(String[] args) { Student student_1 = new Student("学号1", "学生1"); List<Student> stus = new ArrayList<Student>(); stus.add(student_1); Teacher teacher_1 = new Teacher("编号1", "教师1", stus); JSONObject obj = JSONObject.fromObject(teacher_1); System.out.println("JSON格式的Teacher->" + obj.toString()); // 定义一个Map Map<String, Class<Student>> map = new HashMap<String, Class<Student>>(); map.put("stus", Student.class); // key为teacher私有变量的属性名 // 使用JSONObject.toBean(jsonObject, beanClass, classMap) Teacher teacherBean = (Teacher) JSONObject.toBean(obj, Teacher.class, map); try { Student studentBean = teacherBean.getStus().get(0); System.out.println(studentBean); } catch (Exception e) { System.out.println("出现异常"); e.printStackTrace(); } } }
控制台打印结果:
JSON格式的Teacher->{"stus":[{"stuName":"学生1","stuNo":"学号1"}],"teaId":"编号1","teaName":"教师1"} Student [stuNo=学号1, stuName=学生1]
相关推荐
`fromObject`方法将Java对象转换为`JSONObject`,然后调用`toString()`将其转化为JSON字符串。 ### 进阶使用 - **处理嵌套结构**:`JSONObject`也支持嵌套结构,即JSON对象内包含其他JSON对象或数组。可以通过递归...
使用`JSONObject`,你可以轻松地将Java对象转换为JSON格式,或者将接收到的JSON字符串解析为Java对象。例如,你可以创建一个新的`JSONObject`,添加键值对,然后将其转换为字符串: ```java import org.json....
要将这个`User`对象转换成`JSONObject`,我们可以使用`JSONObject.fromObject()`方法: ```java User user = new User(); user.setName("John"); user.setAge(30); JSONObject jsonObject = JSONObject.fromObject...
这里,`JSON.parseObject()` 方法用于将JSON字符串转换为`JsonObject`,`getJSONArray()` 用于获取指定键对应的`JsonArray`,而 `getString()` 则用于从`JsonObject`中提取字符串值。 接下来是第二种格式的JSON数据...
`JSONObject`类提供了一个构造函数,可以将JSON格式的字符串转换为`JSONObject`对象。例如: ```java import org.json.JSONObject; public class JsonExample { public static void main(String[] args) { ...
简单的Json转化类,Json格式与Json对象之间互相转换。 示例:(文件内附示例) string s = "{\r\n" + "\"name\":\"Bill Gates\",\r\n"+ "\"street\":\"Fifth Avenue New York 666\",\r\n"+ "\"age\":56,\r\n"+ ...
在标题和描述中提到的“JSONObject对象相关的jar包依赖”,实际上是指要使用 `JSONObject` 类,你需要在你的项目中引入相应的 jar 包依赖。在传统的 Java 开发中,这通常意味着下载特定版本的 `json.jar` 文件,并将...
// 将JSONObject转换为WeatherBean_Baidu实例 WeatherBean_Baidu weather = (WeatherBean_Baidu) JSONObject.toBean(jsonObj, WeatherBean_Baidu.class, classMap); // 打印结果 System.out.println(weather.get...
3. **将JSONObject转换为Java对象** 当JSON数据包含嵌套的对象时,我们需要创建对应的Java类来存储数据。例如,对于上面的JSON,我们可以创建两个类:`MainObject`和`SubObject`。 ```java public class Main...
要使用`JSONObject`,首先需要在项目中引入对应的jar包。根据描述,这里提供了必要的6个包,这些包可能包括了`org.json`库的核心类、解析器以及可能的依赖。确保项目构建路径中包含这些jar包后,就可以在代码中导入...
还可以通过get方法获取键对应的值,通过put方法修改或添加键值对,通过toString方法将JSONObject转换为字符串,等等。JSONObject还支持嵌套的对象和数组操作,使你能处理复杂的JSON结构。 总之,"jsonobject.zip...
- `toMap()` 将JSONObject转换为Map对象。 7. **验证对象**: - `has(String key)` 检查JSON对象是否包含指定的键。 - `isNull(String key)` 检查指定键对应的值是否为null。 在实际开发中,`org.json`库还提供...
为了在项目中使用这些库,你需要将它们添加到项目的类路径中,或者在Maven或Gradle的配置文件中指定对应的依赖。这样,你就可以在代码中调用如`JSONArray.parseArray(String json)`、`JSONObject.fromObject(Object ...
- 使用`put()`方法:`put(String key, Object value)`方法用于添加键值对,其中`key`是字符串,`value`可以是任何Java对象(但最终会转换成JSON兼容的类型)。 3. 访问键值对 - 使用`get()`方法:`get(String key...
最后,我们通过调用`toString()`方法将JSONObject转换为字符串并打印出来。 JSONObject提供了丰富的API,包括但不限于: 1. `put(String key, value)`:添加键值对到JSONObject。 2. `get(String key)`:获取指定...
一.下载json 具体到http://www.json.org/上找Java-json下载,并把其放到项目源...//将字符串转换成jsonObject对象 JSONObject myJsonObject = new JSONObject(jsonMessage); //获取对应的值 value1 = myJsonObject.g
2. 解析JSON字符串:使用`JSONObject`的构造函数接收JSON格式的字符串,将其转化为对象。 3. 获取值:使用get方法获取指定键对应的值,可以是字符串、数字、布尔值等。 4. 遍历JSON:使用keys方法获取所有键,然后...
`net.sf.json.JSONObject` 是json-lib中的核心类,它允许你将Java对象转换为JSON表示,并反之将JSON字符串解析为Java对象。这极大地简化了数据的序列化和反序列化过程。例如,你可以将一个HashMap转换为JSON对象,...
例如,使用`toMap()`方法将JsonObject转换为Map,使用`putAll(Map)`将Map转换为JsonObject。 8. **处理嵌套JsonObject和JsonArray**:JsonObject可以包含其他JsonObject和JsonArray,可以通过`getJSONObject(String...
要将JSONObject转换回JSON格式的字符串,可以使用toString()方法: ```java String jsonString = jsonObject.toString(); ``` 6. **与其他数据类型转换** JSONObject还提供了方便的方法将JSON对象转换为其他...