代码改变世界

浅谈JSON(二)

2013-11-11 00:11  小华.J  阅读(303)  评论(0)    收藏  举报

JAVA使用org.json构造并解析JSON

//使用new JSONObject()构造一个JSON对象,参数为空
 public String jsonTest() throws JSONException{
        JSONObject json=new JSONObject();
        JSONArray jsonMembers = new JSONArray();
         
            JSONObject member1 = new JSONObject();
            member1.put("loginname", "=jxh");
            member1.put("password", "userpass");
            member1.put("email","1234567@163.com");
            member1.put("sign_date", "0000-00-00");
            jsonMembers.put(member1);
             
            JSONObject member2 = new JSONObject();
            member2.put("loginname", "hxj");
            member2.put("password", "userpass");
            member2.put("email","123456@126.com");
            member2.put("sign_date", "0000-00-00");
            jsonMembers.put(member2);
 
        json.put("users", jsonMembers);
                //以字符串形式返回JSON对象的内容
        return json.toString();
    }
     
//从字符串构造一个JSON对象并解析之
  public String jsonTest2() throws JSONException{
 String jsonString="{\"users\":[{\"loginname\":\"jxh\",\"password\":\"userpass\",\"email\":\"jxh@163.com\"},{\"loginname\":\"hxj\",\"password\":\"userpass\",\"email\":\"1234567@163.com\"}]}";
        JSONObject json= new JSONObject(jsonString);
        JSONArray jsonArray=json.getJSONArray("users");
        String loginNames="loginname list:";
        for(int i=0;i<jsonArray.length();i++){
            JSONObject user=(JSONObject) jsonArray.get(i);
            String userName=(String) user.get("loginname");
            if(i==jsonArray.length()-1){
                loginNames+=userName;
            }else{
                loginNames+=userName+",";
            }
        }
        return loginNames;
    }
从上面的示例可以看出,在JAVA中处理JSON还是相当方便的。
 
以上事例中的类和方法
 
1、JSONObject:JSON对象,其代表的格式为
{
  
  "key1":"values1",
  "key2":"values2",
  "key3":"values3",
    .
    .
    .
  "keyn":"valuesn"
}
2、JSONArray:json数组对象,它代表了一个多个JSON对象的数组,它的每一个元素为一个JSON对象,其代表的格式为:
[
  {
    "key1":"values1",
    "key2":"values2",
    "key3":"values3",
      .
      .
      .
    "keyn":"valuesn"
  
  },
  {
    "key1":"values1",
    "key2":"values2",
    "key3":"values3",
      .
      .
      .
    "keyn":"valuesn"
  
  },
  {
    "key1":"values1",
    "key2":"values2",
    "key3":"values3",
      .
      .
      .
    "keyn":"valuesn"
  
  }
]
 
JSONObject.put(String key,Object value)方法:向JSONObject里加入新的键值对的方法。
 
例如:
 
JSONObject json = new JSONObject();
json.put("name","jxh");
json.put("age",20);
json.put("marriged",false);
System.out.println(json);
 
的输出结果是
{
  "name":"jxh",
  "age":20,
  "marriged":false
}(实际输出没有换行)
 
JSONArray.put(int index,Object value)方法:向JSONArray指定位置添加JSON对象。
 
例如:
 
JSONArray jsonArray = new JSONArray();
JSONObject json = new JSONObject();
JSONObject info = new JSONObject();
info.put("name","jxh");
info.put("age",20);
info.put("marriged",false);
jsonArray.put(0,"jxh");
jsonArray.put(1,20);
jsonArray.put(2,false);
jsonArray.put(3,info);
json.put("array",jsonArray);
json.put(“info”,info);
System.out.println(json);
 
输出结果为:
{
  "info":
    {
      "age":20,
      "marriged":false,"
      name":"jxh"
    },
  "array":[
        "jxh",
        20,
        false,
        {
          "age":20,
          "marriged":false,
          "name":"jxh"
        }
      ]
}
 
JSONObject.get(String key)方法:获取指定key的值
 
如上例:
json.get("info")  -----> JSONObject   
    {
      "age":20,
      "marriged":false,"
      name":"jxh"
    }
json.get("array') -----> JSONArray
        
        "jxh",
        20,
        false,
        {
          "age":20,
          "marriged":false,
          "name":"jxh"
        }
info.get("name") ------> "jxh"
info.get("age") -----> 20
info.get("marriged") -------> false
注意:JSONObject.get(String key)方法返回的是Object对象,上述语句赋与变量时需要强制转型。如:
String name = (String) info.get("name");
我们也可以使用JSONObjet.getXXX()的方式来解析JSONObject,支持String、long、double、int、boolean、JSONObject、JSONArray,如
JSONArray array = json.getJSONArray("array");
boolean marriged = info.getBoolean("marriged");
JSONObject info = json.getJSONObject("info");
 
JSONArray.get(int index)方法:获取JSON数组中指定位置的元素。
jsonArray.get(0) ----->"jxh"
jsonArray.get(1) ----->20
jsonArray.get(2) ----->false
jsonArray.get(3) ----->
        {
          "age":20,
          "marriged":false,
          "name":"jxh"
        }
和上面一样对get方法所获得的元素赋以变量是需要强制转型,也可使用getXXX(int index)来获取指定类型的值,这里就不再举例
 
JSONObject.remove(String key)方法:移除键为key的JSON元素,如:
info.remove("name");
System.out.println(info);
 
输出结果为:
{
  "age":20,
  "marriged":false
}
 
JSONArray.remove(int index)方法:移除JSONArray中指定位置的元素,如:
 
jsonArray.remove(3);
System.out.println(jsonArray);
 
输出结果为:
["jxh",20,false]
 
其他方法详见org.json的API:http://www.json.org/java/index.html