把json对象转为java对象报错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了把json对象转为java对象报错相关的知识,希望对你有一定的参考价值。

/*封装的对象*/
public class Student
private int name;
private int age;
private Child child;
setter getter方法省略

public class Child
private String a;
private String b;
setter getter方法省略


public class json
public static void main()
String str = "name:11,age:2,child:[a:'3',b:'4']";
JSONObject obj = JSONObject.fromObject(str);
Map<String,Class> map = new HashMap<String,Class>();
map.put("child",Child.class);
Student s = (Student)JSONObject.toBean(obj,Student.class,map);
System.out.println(s.getAge());
System.out.println(s.getName());
System.out.println(s.getChild().getA());
System.out.println(s.getChild().getB());

/*报错*/
严重: Method invocation failed.
java.lang.IllegalArgumentException: argument type mismatch
org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:1759)
at org.apache.commons.beanutils.PropertyUtils.setSimpleProperty(PropertyUtils.java:577)
at net.sf.json.util.PropertySetStrategy$DefaultPropertySetStrategy.setProperty(PropertySetStrategy.java:43)
Exception in thread "main" net.sf.json.JSONException: java.lang.IllegalArgumentException: Cannot invoke com.Student.setChild - argument type mismatch
Caused by: java.lang.IllegalArgumentException: Cannot invoke com.Student.setChild - argument type mismatch

/*说明*/
我用的是json-lib-jdk.jar所需的jar包已经导入,就别在导入包的问题上浪费时间了

参考技术A 参数类型不匹配
JSONObject obj = JSONObject.fromObject(new Student());
试试追问

new一个空对象有用吗,我是要把字符串转成java对象,不放字符串,放空对象肯定不对

追答

我是举例子,告诉你把参数换成对象,你自己set进去值啊!

追问

我是要转成java对象,你让我set进去值,那我用这个包转干嘛

参考技术B 推荐用alibaba的 fastjson
支持级联转换
参考技术C 朋友,这问题你最终怎么解决的??同求啊

Json系列:Gson简单使用,把json字符串转为java对象。

  • 引入Gson库
 implementation 'com.google.code.gson:gson:2.8.6'
  • 准备json字符串
{"name":"怪盗kidou","age":24,"emailAddress":"ikidou@example.com"}
  • 手敲一个TestBean.java,先不用GsonFormat插件。
public class TestBean {
   public String name;
   public String age;
   public String emailAddress;
}
  • 把json字符串转为java Bean对象。
public class MainActivity extends AppCompatActivity {
    private static final String TAG = "xx";
    String jsonStr = "{\\"name\\":\\"怪盗kidou\\",\\"age\\":24,\\"emailAddress\\":\\"ikidou@example.com\\"}";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TestBean bean = new Gson().fromJson(jsonStr, TestBean.class);
        Log.i(TAG,  bean.name + " " + bean.age + " " + bean.emailAddress);
    }
}

运行结果:
在这里插入图片描述

以上是关于把json对象转为java对象报错的主要内容,如果未能解决你的问题,请参考以下文章

Json系列:Gson简单使用,把json字符串转为java对象。

java 把json对象转换成json字符串

json字符串怎么转换为java对象?

我拼成的JSON字符串,然后转换JSON对象成功了,但是到了后台报错.

json字符串怎么转换为java对象

json格式的字符串转换为java对象