java对象转向json字符串

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就是比较强大。 
  1

回答者: fcrpg2002 - 四级   java对象转向json字符串 2009-8-2 14:11

我来评论>>
提问者对于答案的评价:
十分感谢!

<script type="text/javascript">(function(){var t=(new Date()).getTime();var stop=false;var post_data=&quot;ct=19&amp;tn=ikasyndatajson&amp;cm=100003&amp;at=10002&amp;qid=109528305&amp;bid=1614601&amp;bun=&quot;+encodeURIComponent(&quot;fcrpg2002&quot;)+&quot;&amp;t=&quot;+t;var msg=[&quot;评价成功!&quot;,&quot;您已评价!&quot;];var pj=Fe.G(&quot;pingjia&quot;);var link=pj.getElementsByTagName(&quot;div&quot;)[0];link.title=&quot;回答很有帮助,谢谢!&quot;;Fe.on(link,&quot;mouseout&quot;,hideTip);function hideTip(){setTimeout(function(){var span=Fe.G(&quot;pingjia&quot;).getElementsByTagName(&quot;span&quot;);if(span.length!=1){span[1].parentNode.removeChild(span[1])}},2000)}Fe.on(link,&quot;mouseout&quot;,function(){this.className=&quot;pj_div&quot;});Fe.on(link,&quot;mouseup&quot;,function(){this.className=&quot;pj_div pj_divhover&quot;});Fe.on(link,&quot;mousedown&quot;,function(){this.className=&quot;pj_div pj_divhover pj_divaction&quot;});Fe.on(link,&quot;mouseover&quot;,function(){this.className=&quot;pj_div pj_divhover&quot;});Fe.on(link,&quot;click&quot;,action);function action(){var span=pj.getElementsByTagName(&quot;span&quot;);span=(span.length==1)?document.createElement(&quot;span&quot;):span[1];if(stop){span.style.color=&quot;#dd7368&quot;;span.innerHTML=msg[1];span.className=&quot;pj_tip&quot;;pj.appendChild(span);return false}Fe.Ajax.post(&quot;/q?ct=19&amp;tn=ikasyndatajson&quot;,post_data,function(xhr){var b=pj.getElementsByTagName(&quot;b&quot;)[0];if(!!eval(xhr.responseText)){b.innerHTML=parseInt(b.innerHTML)+1;span.innerHTML=msg[0]}else{span.innerHTML=msg[1]}span.style.color=&quot;#dd7368&quot;;span.className=&quot;pj_tip&quot;;pj.appendChild(span)});stop=true;setTimeout(function(){stop=false},10000)}})();</script>

.goodvalueitem{ background:url(http://img.baidu.com/img/iknow/ico_good.gif) no-repeat left; padding:2px 0 0 20px; zoom:1; } .relateTable td { line-height:22px; }
相关内容
 
 
 
 
 
   
 
<script> var e=G(&quot;qbRelateTableBody&quot;); if(e){ var links=e.getElementsByTagName(&quot;a&quot;); for(var l=links.length,i=0;i&lt;l;i++){ var a=links[i]; a.href=a.href+&quot;&amp;fr2=query&quot;; } } </script>
其他回答    4
只是要求转化成字符串的话,可以试试..重写toString方法
如:
@Override
public String toString(){
 return "{id:"+this.id+","name='"+this.name+"'"};
} 

回答者: liushebiao - 六级   java对象转向json字符串 2009-8-1 18:56

这很简单拉 这种小框架可以自己些嘛. 

回答者: 雪中霖雨 - 四级   java对象转向json字符串 2009-8-1 21:29

导个json.lib包就可以了呗。也可以自己写。不过,有现成的包。直接用。 

回答者: coffeezhu007 - 二级   java对象转向json字符串 2009-8-1 21:30

看看http://blog.csdn.net/qking93415981/archive/2008/10/22/3124071.aspx