要求将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;提示出错。
谁能帮我指出我的问题在哪,解决方法是说什么?谢了。
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;提示出错。
谁能帮我指出我的问题在哪,解决方法是说什么?谢了。
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());
}
但是我实际上碰到的问题是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中的内容再复制一遍吗?
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\":\"李四\"}}";
不需要复制吧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);貌似这样可以,你可以试试
最后一个问题,解决了就结帖。
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都会变化。
我是一只小小的菜鸟。
\"user\":{\"haha\":\"哈哈\",\"hehe\":\"呵呵\"}你这样数据不都重复了吗?