首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

java 顶用json-lib可以把json字符串直接封装成对象吗

2013-03-26 
java 中用json-lib可以把json字符串直接封装成对象吗{person:[{id:1,name:zpq,password:123456

java 中用json-lib可以把json字符串直接封装成对象吗
{"person":[{"id":1,"name":"zpq","password":"123456"}],"head":{"result":1,"msgType":23}}
 
head类
public class Head {
 private int msgType;
 private int result;
 
 public Head(){}
 
 public int getMsgType() {
  return msgType;
 }
 public void setMsgType(int msgType) {
  this.msgType = msgType;
 }
 public int getResult() {
  return result;
 }
 public void setResult(int result) {
  this.result = result;
 }
 

 
 
User类
public class User {
 private int id;
 private String name;
 private String password;
 
 public User(){}
 
 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 String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 
}
 
UserJson类 
 
public class UserJson {
 private Head head;
 private List<User> person;
 
 public UserJson(){}
 
 public Head getHead() {
  return head;
 }
 public void setHead(Head head) {
  this.head = head;
 }
 public List<User> getPerson() {
  return person;
 }
 public void setPerson(List<User> person) {
  this.person = person;
 }
 
}
 

public static void main(String[] args) {
User user = new User();
user.setId(1);
user.setName("zpq");
user.setPassword("123456");

List<User> list = new ArrayList<User>();
list.add(user);

Head head = new Head();
head.setResult(1);
head.setMsgType(23);

UserJson uj = new UserJson();
uj.setHead(head);
uj.setPerson(list);

String json = getJson(uj);
String j = json.substring(1,json.length()-1);
System.out.println(j);
//System.out.println(json);

                //解析json字符串
JSONObject object = JSONObject.fromObject(j);
JSONArray person = object.getJSONArray("person");
JSONObject info = person.getJSONObject(0);
System.out.println(info.get("id"));
System.out.println(info.getString("name"));
System.out.println(info.get("password"));
JSONObject head1 = object.getJSONObject("head");
System.out.println(head1.get("result"));
System.out.println(head1.get("msgType"));
//System.out.println(jArray);
}

//将对象转为json字符串
public static String getJson(UserJson uj){


JSONArray json = JSONArray.fromObject(uj);
return json.toString();
}

可以把上面的json字符串直接解析成UserJson实体吗 还是只能把它的每个属性解析出来自己封装C#中是可以实现的 json java
[解决办法]
去查查json-lib的api看看吧!
[解决办法]
你可以试一下 pacakge gson, http://code.google.com/p/google-gson/


import com.google.gson.Gson;

public class Head {
  private int msgType;
  private int result;
  public Head() {};
}

// Sample code
Gson gson = new Gson();
String json = "{"result":1,"msgType":23}";  // sample json string for Head

// Convert to Head
Head head = gson.fromJson(json, Head.class);  

[解决办法]
楼主一定要用 Json-lib 的话,这里是简单的示例代码:

import net.sf.json.JSONObject;

public class Head {
  private int msgType;
  private int result;
  public Head() {};
}

// Sample code
String json = "{"result":1,"msgType":23}";  // sample json string for Head

// Convert to Head
JSONObject jsonObject = JSONObject.fromObject( json );  
Head head = (Head) JSONObject.toBean( jsonObject, Head.class );  

个人的观点,gson 比 Json-lib 好的地方是,gson 用了template, 这样不用 cast type。与3楼对比一下最后一行:

// Json-lib, need cast to type HEAD
Head head = (Head) JSONObject.toBean( jsonObject, Head.class );

// gson, unnecessary to cast to HEAD
Head head = gson.fromJson(json, Head.class); 


热点排行