要求将json对象反序列化为javabean。我的代码:(javabean略掉。)             String json = "{x:1,\"userId\":\"112\",element:[{id:'123',name:'haha'},{id:'456',name:'hehe'}]}";     JSONObject o = JSONObject.fromObject(json);
    Map<String, Class> m = new HashMap<String, Class>();
    m.put("x", Integer.class);
    m.put("userId", String.class);
    m.put("element",String[].class);
    Jsontobean b = (Jsontobean) JSONObject.toBean(o, Jsontobean.class, m);
    Object bean = JSONObject.toBean( o ); 
    System.out.println("x: " + b.getX());
             System.out.println("userId: " + b.getuserId());
输出的结果是:
x: 1
userId: 112
我现在的问题是将element解析出来。我曾经这样解析   JSONArray jsonArray = o.getJSONArray("element");
   for (int i = 0; i < jsonArray.size(); i++) {
    System.out.println("element " + i + " :" + jsonArray.get(i));
   }解析出来的格式是这样
element 0 :{"id":"123","name":"haha"}
element 1 :{"id":"456","name":"hehe"}但我想将解析element写成javabean的形式,求高手指教。
另:看json-lib中说明,用到的是
     Object bean = JSONObject.toBean( o ); 
     List expected = JSONArray.toList( o.getJSONArray( "element" ) );   
     Assertions.assertEquals( expected, (List) PropertyUtils.getProperty( bean, "array" ) );  但这个assertEquals()方法myeclipse提示要新建,import junit.framework.TestCase;提示出错。
谁能帮我指出我的问题在哪,解决方法是说什么?谢了。

解决方案 »

  1.   

    哦。对了,解析出来的格式最好不是上面那种格式。就是你想输出element中元素的某值,调用该值得方法就可以了。
      

  2.   

    少包,看最后这个是缺少了junit的jar 包,下载一个添加上去就行了.
      

  3.   


    public class WhatBean {
    private int x = 1;
    private String userId = "112";
    private List<Element> element;
    public int getX() {
    return x;
    }
    public void setX(int x) {
    this.x = x;
    }
    public String getUserId() {
    return userId;
    }
    public void setUserId(String userId) {
    this.userId = userId;
    }
    public List<Element> getElement() {
    return element;
    }
    public void setElement(List<Element> element) {
    this.element = element;
    }

    }
    public class Element {
    private int id;
    private String name;
    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;
    }

    }
    String jsonStr = "{x:1,\"userId\":\"112\",element:[{id:'123',name:'haha'},{id:'456',name:'hehe'}]}";
    Map<String,Class<?>> m  = new HashMap<String,Class<?>>();
    m.put("x", Integer.class);
    m.put("userId", String.class);
    m.put("element",Element.class);
    WhatBean whatBean  = (WhatBean)JSONObject.toBean( JSONObject.fromObject(jsonStr), WhatBean.class, m ); 
    for(Element e : whatBean.getElement()){
    System.out.println(e.getId() +"," + e.getName());
    }
      

  4.   

    4L大大的代码仔细看了。很对。
    但是我实际上碰到的问题是json数据的嵌套。举个例子:
    String json = "{x:1,\"userId\":\"112\",element:[{id:'123',name:'haha',\"source\":{id:'11',name:'ha'}},{id:'456',name:'hehe',source:{id:'44',name:'he'}}],\"user\":{\"zhangs\":\"张三\",\"lisi\":\"李四\"}}";难道还要重新写个类,把element中的内容再复制一遍吗?
      

  5.   

    晕。。加颜色没加好。重发一下。
    String json = "{x:1,\"userId\":\"112\",element:[{id:'123',name:'haha',\"source\":{id:'11',name:'ha'}},{id:'456',name:'hehe',source:{id:'44',name:'he'}}],\"user\":{\"zhangs\":\"张三\",\"lisi\":\"李四\"}}";
      

  6.   

    你要把element写成javabean,那至少得有一个跟element对应的javabean吧?
    不需要复制吧public class Element {
    private int id;
    private String name;
    private Element source;

    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 Element getSource() {
    return source;
    }
    public void setSource(Element source) {
    this.source = source;
    }
    @Override
    public String toString(){
    return "" + id + "," + name;
    }
    }m.put("x", Integer.class);
    m.put("userId", String.class);
    m.put("element",Element.class);
    m.put("source",Element.class);貌似这样可以,你可以试试
      

  7.   

    好了,ls,看了你的代码很兴奋。敢问要怎样才能达到你那样的水平啊。。
    最后一个问题,解决了就结帖。
    String json = "{x:1,\"userId\":\"112\",element:[{id:'123',name:'haha',nick:'哈哈',\"source\":{id:'11',name:'ha',nick:'哈'}},{id:'456',name:'hehe',nick:'呵呵',source:{id:'44',name:'he',nick:'呵'}}],\"user\":{\"haha\":\"哈哈\",\"hehe\":\"呵呵\"}}";怎样把那个user解析出来,将user中所有的成员都输出?这个user每次根据element中的name,nick变化而变化,而每次运行该代码时element中的name,nick都会变化。
    我是一只小小的菜鸟。
      

  8.   

    user是一个数组还是一个普通的对象?
    \"user\":{\"haha\":\"哈哈\",\"hehe\":\"呵呵\"}你这样数据不都重复了吗?
      

  9.   

    程序给的就是这样的。上面这个字符串是我简化后的,原意是有n个用户,这n个用户的信息放在一个数组里面,这n个用户都有name,nick等成员,然后这n个数组外面紧接着的成员就是user了,当然,数组和user都是在这个字符串里面。user里面的成员就是这n个用户的name和nick。现在我要做的就是输出user了,不知道说的请不清楚。
      

  10.   

    额。user是已经有了的。并不需要获得,只是输出而已。