作者微信 bishe2022

代码功能演示视频在页面下方,请先观看;如需定制开发,联系页面右侧客服
JAVA操作JSON格式数据

Custom Tab

[java] 
//需要提交的json数据  
String jsonData = "{\"openid\":\"%s\",\"to_groupid\":%d}";  
//调用接口移动用户分组  
JSONObject jsonObject = WeixinUtil.httpRequest(requestUrl, "POST", String.format(jsonData, openId,groupId));

但是,今天用到消息模板接口的时候,发现POST请求的数据有点多,如果还是用这种方式就显得有些麻烦了,而且也不是很直观,需要对双引号做转义操作,有的时候转多了看着就头晕。所以特定查了一翻资料自己研究了一下。


首先,因为要用到json,所以项目中先要导入json开发工具包,用于Java对象和Json字符串之间的转换;

json开发工具包一共有3个jar:ezmorph-1.0.6.jar,json-lib-2.2.3-jdk13.jar和morph-1.1.1.jar。

这三个jar工具包已经上传至CSDN。有需要的话可以去下载:

http://download.csdn.net/detail/hu1991die/8401677


示例代码:

[java] 
package com.json;  
  
import java.util.Iterator;  
  
import net.sf.json.JSONArray;  
import net.sf.json.JSONObject;  
  
/** 
 * Java操作JSON格式数据 
 * @author feizi 
 * @time 2015-1-27下午5:36:13 
 */  
public class TestJSON {  
  
    public static void main(String[] args) {  
        //jsonObject:{"right":"right","left":"left","obj":{"second":"222","third":"333"},
        "ele":{"four":"444","five":"555"},"data":[{"name":"张三","age":"23","sex":"男"},{"name":"李三","age":"20","sex":"女"}]}  
        JSONObject jsonObject = TestJSON.createJSONObject();  
        // 输出jsonobject对象    
        System.out.println("jsonObject:" + jsonObject);    
          
        // 根据key返回一个字符串    
        String right = jsonObject.getString("right");    
        System.out.println("right==>" + right); //right==>right  
          
        JSONObject obj = (JSONObject) jsonObject.get("obj");  
        System.out.println("obj==>"+obj);//obj==>{"second":"222","third":"333"}  
          
        String second = (obj == null ? "" : (String)obj.get("second"));  
        System.out.println("second==>" + second); //second==>222  
          
        JSONArray array = jsonObject.getJSONArray("data");  
        System.out.println("array==>"+array);
        //array==>[{"name":"张三","age":"23","sex":"男"},{"name":"李三","age":"20","sex":"女"}]  
          
        if(!array.isEmpty()){  
            for(int i = 0; i < array.size(); i++){  
                //{"name":"张三","age":"23","sex":"男"}  
                //{"name":"李三","age":"20","sex":"女"}  
                JSONObject element = (JSONObject) array.get(i);//array.get(i)方法默认返回的是Object类型,
                需要造型成JSONObject类型才能取出key值  
                System.out.println("element==>"+element);  
                  
                String name = (String)element.get("name");  
                String age = (String)element.get("age");  
                String sex = (String)element.get("sex");  
                  
                //name==>张三  
                //age==>23  
                //sex==>男  
                //name==>李三  
                //age==>20  
                //sex==>女  
                System.out.println("name==>"+name);  
                System.out.println("age==>"+age);  
                System.out.println("sex==>"+sex);  
            }  
              
            //或者用iterator迭代器进行迭代  
            for (Iterator<Object> iterator = array.iterator(); iterator.hasNext();) {  
                JSONObject element = (JSONObject) iterator.next();  
                System.out.println("element==>"+element);  
                //之后和上面一样  
            }  
              
        }  
    }  
      
    public static JSONObject createJSONObject(){  
        JSONObject jsonObject = new JSONObject();  
          
        //一般格式  
        //jsonObject:{"right":"right","left":"left"}  
        jsonObject.put("right", "right");  
        jsonObject.put("left", "left");  
          
          
        //嵌套格式  
        //jsonObject:{"obj":{"second":"222","third":"333"},"ele":{"four":"444","five":"555"}}  
        JSONObject jsonObj = new JSONObject();  
        jsonObj.put("second", "222");  
        jsonObj.put("third", "333");  
          
        JSONObject ele = new JSONObject();  
        ele.put("four", "444");  
        ele.put("five", "555");  
          
        jsonObject.element("obj", jsonObj);  
        jsonObject.element("ele", ele);  
          
        //数组嵌套格式  
        //jsonObject:{"data":[{"name":"张三","age":"23","sex":"男"},{"name":"李三","age":"20","sex":"女"}]}  
        JSONObject dataEle1 = new JSONObject();  
        dataEle1.put("name", "张三");  
        dataEle1.put("age", "23");    
        dataEle1.put("sex", "男");  
          
        JSONObject dataEle2=new JSONObject();    
        dataEle2.put("name", "李三");    
        dataEle2.put("age", "20");    
        dataEle2.put("sex", "女");    
          
        JSONArray jsonArray = new JSONArray();  
        jsonArray.add(0, dataEle1);  
        jsonArray.add(1, dataEle2);  
          
        jsonObject.accumulate("data", jsonArray);  
        //jsonObject.element("data", jsonArray);//貌似这两种方法都可以,我没有去详细的查过,所以也不清楚它们两者之间到底有什么区别  
        return jsonObject;  
    }  
      
}

关于微信API中的模板消息接口:

POST数据说明

POST数据示例如下:

[php] 
{  
    "touser":"OPENID",  
    "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",  
    "url":"http://weixin.qq.com/download",  
    "topcolor":"#FF0000",  
    "data":{  
            "first": {  
                "value":"恭喜你购买成功!",  
                "color":"#173177"  
            },  
            "keynote1":{  
                "value":"巧克力",  
                "color":"#173177"  
            },  
            "keynote2": {  
                "value":"39.8元",  
                "color":"#173177"  
            },  
            "keynote3": {  
                "value":"2014年9月16日",  
                "color":"#173177"  
            },  
            "remark":{  
                "value":"欢迎再次购买!",  
                "color":"#173177"  
            }  
    }  
}

Java中进行封装,组装成上面的JSON格式数据


我的方法比较笨,仅作参考:

[java]
public class JsonTemplate {  
    private String touser;//接收者  
    private String template_id;//模板ID  
    private String url;//URL地址  
    private String topcolor;//顶部颜色  
    private JSONObject data;//内容  
  
    public JsonTemplate(){  
          
    }  
      
    public String getTouser() {  
        return touser;  
    }  
  
    public void setTouser(String touser) {  
        this.touser = touser;  
    }  
  
    public String getTemplate_id() {  
        return template_id;  
    }  
  
    public void setTemplate_id(String template_id) {  
        this.template_id = template_id;  
    }  
  
    public String getUrl() {  
        return url;  
    }  
  
    public void setUrl(String url) {  
        this.url = url;  
    }  
  
    public String getTopcolor() {  
        return topcolor;  
    }  
  
    public void setTopcolor(String topcolor) {  
        this.topcolor = topcolor;  
    }  
  
    public JSONObject getData() {  
        return data;  
    }  
  
    public void setData(JSONObject data) {  
        this.data = data;  
    }  
}
[java] 
package com.wx.pojo.template;  
/** 
 * 模板消息的内容 
 * @author feizi 
 * @time 2015-1-27下午2:53:49 
 */  
public class DataElement {  
    private String title;// 标题名  
    private String value;// 内容  
    private String color;// 颜色  
  
    public DataElement() {  
  
    }  
  
    public DataElement(String title, String value, String color) {  
        this.title = title;  
        this.value = value;  
        this.color = color;  
    }  
  
    public String getTitle() {  
        return title;  
    }  
  
    public void setTitle(String title) {  
        this.title = title;  
    }  
  
    public String getValue() {  
        return value;  
    }  
  
    public void setValue(String value) {  
        this.value = value;  
    }  
  
    public String getColor() {  
        return color;  
    }  
  
    public void setColor(String color) {  
        this.color = color;  
    }  
}

测试上面的JSON示例:

[java] 
/** 
     * 组装JSON格式 
     * @param tmp 
     * @param dataList 
     * @return 
     */  
    public static JSONObject createJSONObject(JsonTemplate tmplate,List<DataElement> dataList){  
        JSONObject dataJson = new JSONObject();  
        if(dataList != null && dataList.size() > 0){  
            JSONObject elementJson = null;  
            for (DataElement data : dataList) {  
                elementJson = new JSONObject();  
                elementJson.put("value", data.getValue());  
                elementJson.put("color", data.getColor());  
                  
                dataJson.put(data.getTitle(), elementJson);  
            }  
        }  
          
        JSONObject tmpJSON = new JSONObject();  
        tmpJSON.put("touser", tmplate.getTouser());  
        tmpJSON.put("template_id", tmplate.getTemplate_id());  
        tmpJSON.put("url", tmplate.getUrl());  
        tmpJSON.put("topcolor", tmplate.getTopcolor());  
        tmpJSON.put("data", dataJson);  
          
        return tmpJSON;  
    }  
      
    public static void main(String[] args) {  
        JsonTemplate tmp = new JsonTemplate();  
        tmp.setTouser("OPENID");  
        tmp.setTemplate_id("ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY");  
        tmp.setUrl("http://weixin.qq.com/download");  
        tmp.setTopcolor("#FFF");  
          
        DataElement data0 = new DataElement();//由于已经重写了带参构造器,也可以直接调用带参构造器进行初始化操作  
        data0.setTitle("first");  
        data0.setValue("恭喜你购买成功!");  
        data0.setColor("#173177");  
          
        DataElement data1 = new DataElement();  
        data1.setTitle("keynote1");  
        data1.setValue("巧克力");  
        data1.setColor("#173177");  
          
        DataElement data2 = new DataElement();  
        data2.setTitle("keynote2");  
        data2.setValue("39.8元");  
        data2.setColor("#173177");  
          
        DataElement data3 = new DataElement();  
        data3.setTitle("keynote3");  
        data3.setValue("2014年9月16日");  
        data3.setColor("#173177");  
          
        DataElement data4 = new DataElement();  
        data4.setTitle("remark");  
        data4.setValue("欢迎再次购买!");  
        data4.setColor("#173177");  
          
        List<DataElement> dataList = new ArrayList<DataElement>();  
        dataList.add(data0);  
        dataList.add(data1);  
        dataList.add(data2);  
        dataList.add(data3);  
        dataList.add(data4);  
          
        JSONObject tmpJSON = JsonTemplate.createJSONObject(tmp, dataList);  
          
        System.out.println(tmpJSON);  
          
    }

运行之后,控制台的输出结果:

[java]
{"touser":"OPENID","template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
"url":" 
","color":"#173177"},"keynote1":{"value":"巧克力","color":"#173177"},"keynote2":{"value":"39.8元","color":"#173177"},
"keynote3":{"value":"2014年9月16日","color":"#173177"},"remark":{"value":"欢迎再次购买!","color":"#173177"}}}

转载自:http://blog.csdn.net/hu1991die/article/details/43197725

Home