java对象转向json字符串
就目前来看,Google的GSON组件不错。至少我在开发中来看,是目前最棒的,而且支持 JDK5 的泛型。 地址:http://code.google.com/p/google-gson/ User 用户类: public class User { @Expose private Long id; @Expose private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } // 测试 JavaBean 的转换 public class Test { public static void main(String[] args) { User user = new User(); user.setId(1001L); user.setName("张三"); GsonBuilder builder = new GsonBuilder(); // 不转换没有 @Expose 注解的字段 builder.excludeFieldsWithoutExposeAnnotation(); Gson gson = builder.create(); String sUser = gson.toJson(user); System.out.println(sUser); // {"id":1001,"name":"张三"} // 将JSON字符串转换为 JavaBean User user2 = gson.fromJson(sUser, User.class); System.out.println(user2.getId() + ", " + user2.getName()); // 1001, 张三 } } // 测试 HashMap 的转换 public class MapTest { public static void main(String[] args) { User user1 = new User(); user1.setId(1001L); user1.setName("张三"); User user2 = new User(); user2.setId(1002L); user2.setName("李四"); Map<String, User> userMap = new HashMap<String, User>(); userMap.put("user1", user1); userMap.put("user2", user2); GsonBuilder builder = new GsonBuilder(); // 不转换没有 @Expose 注解的字段 builder.excludeFieldsWithoutExposeAnnotation(); Gson gson = builder.create(); String sUserMap = gson.toJson(user, new TypeToken<Map<String, User>>(){}.getType()); System.out.println(sUserMap); // {"user1":{"id":1001,"name":"张三"},"user2":{"id":1002,"name":"李四"}} // 将JSON字符串转换为 HashMap Map<String, User> userMap2 = (Map<String, User>)gson.fromJson(sUser, new TypeToken<HashMap<String, User>>(){}.getType()); System.out.println(userMap2.get("user1").getName()); // 张三 } } 当然 GSON的JSON解析设置还不止这些,还有版本的注解、更改字段名称的注解等等。 上面给的网址上有具体的开发文档,和详细的例子。 如今 GSON 已被很多公司所采用,方便快捷。Google就是比较强大。
回答者: fcrpg2002 - 四级 2009-8-2 14:11
十分感谢!
<script type="text/javascript">(function(){var t=(new Date()).getTime();var stop=false;var post_data="ct=19&tn=ikasyndatajson&cm=100003&at=10002&qid=109528305&bid=1614601&bun="+encodeURIComponent("fcrpg2002")+"&t="+t;var msg=["评价成功!","您已评价!"];var pj=Fe.G("pingjia");var link=pj.getElementsByTagName("div")[0];link.title="回答很有帮助,谢谢!";Fe.on(link,"mouseout",hideTip);function hideTip(){setTimeout(function(){var span=Fe.G("pingjia").getElementsByTagName("span");if(span.length!=1){span[1].parentNode.removeChild(span[1])}},2000)}Fe.on(link,"mouseout",function(){this.className="pj_div"});Fe.on(link,"mouseup",function(){this.className="pj_div pj_divhover"});Fe.on(link,"mousedown",function(){this.className="pj_div pj_divhover pj_divaction"});Fe.on(link,"mouseover",function(){this.className="pj_div pj_divhover"});Fe.on(link,"click",action);function action(){var span=pj.getElementsByTagName("span");span=(span.length==1)?document.createElement("span"):span[1];if(stop){span.style.color="#dd7368";span.innerHTML=msg[1];span.className="pj_tip";pj.appendChild(span);return false}Fe.Ajax.post("/q?ct=19&tn=ikasyndatajson",post_data,function(xhr){var b=pj.getElementsByTagName("b")[0];if(!!eval(xhr.responseText)){b.innerHTML=parseInt(b.innerHTML)+1;span.innerHTML=msg[0]}else{span.innerHTML=msg[1]}span.style.color="#dd7368";span.className="pj_tip";pj.appendChild(span)});stop=true;setTimeout(function(){stop=false},10000)}})();</script>
• | |
• | |
• | |
• | |
• | |
只是要求转化成字符串的话,可以试试..重写toString方法 如: @Override public String toString(){ return "{id:"+this.id+","name='"+this.name+"'"}; }
回答者: liushebiao - 六级 2009-8-1 18:56
这很简单拉 这种小框架可以自己些嘛.
回答者: 雪中霖雨 - 四级 2009-8-1 21:29
导个json.lib包就可以了呗。也可以自己写。不过,有现成的包。直接用。
回答者: coffeezhu007 - 二级 2009-8-1 21:30
看看http://blog.csdn.net/qking93415981/archive/2008/10/22/3124071.aspx