用json-lib 处理数据时发现一个有趣的问题?
下面的程序将输出:
aa :: null
bb :: false
cc :: false
dd :: false
null != null ? 那他到底是什么呢?
[code="java"]package com.xy51wan.bean;
import net.sf.json.JSONObject;
public class Basic_Action_Bean {
private String action;
private JSONObject parameters;
public Basic_Action_Bean(String json) {
JSONObject jo = JSONObject.fromObject(json);
action = jo.getString("action");
//if (jo.get("parameters") != null) {
parameters = JSONObject.fromObject(jo.get("parameters"));
//}
jo = null;
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
public JSONObject getParameters() {
return parameters;
}
public Object getParameter(String key){
if(parameters != null){
System.out.println("aa :: " + parameters);
System.out.println("bb :: " + parameters.equals("null"));
System.out.println("cc :: " + (parameters == null));
System.out.println("dd :: " + (parameters.equals(null)));
}
return null;
}
public static void main(String args[]){
//Basic_Action_Bean b = new Basic_Action_Bean("{\"action\":\"getAA\",\"parameters\":{\"a\":100,\"b\":\"2009-04-07\"}}");
Basic_Action_Bean b = new Basic_Action_Bean("{\"action\":\"getAA\"}");
b.getParameter("a");
}
}
[/code]
[b]问题补充:[/b]
用json-lib 处理数据时发现一个有趣的问题?
下面的程序将输出:
aa :: null
bb :: false
cc :: false
dd :: false
null != null ? 那他到底是什么呢?
[code="java"]import net.sf.json.JSONObject;
public class Basic_Action_Bean {
private String action;
private JSONObject parameters;
public Basic_Action_Bean(String json) {
JSONObject jo = JSONObject.fromObject(json);
action = jo.getString("action");
//if (jo.get("parameters") != null) {
parameters = JSONObject.fromObject(jo.get("parameters"));
//}
jo = null;
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
public JSONObject getParameters() {
return parameters;
}
public Object getParameter(String key){
if(parameters != null){
System.out.println("aa :: " + parameters);
System.out.println("bb :: " + parameters.equals("null"));
System.out.println("cc :: " + (parameters == null));
System.out.println("dd :: " + (parameters.equals(null)));
}
return null;
}
public static void main(String args[]){
//Basic_Action_Bean b = new Basic_Action_Bean("{\"action\":\"getAA\",\"parameters\":{\"a\":100,\"b\":\"2009-04-07\"}}");
Basic_Action_Bean b = new Basic_Action_Bean("{\"action\":\"getAA\"}");
b.getParameter("a");
}
}
[/code]
你的理解是错的,
这就要看JSONObject 的toStirng()方法了
public String toString() {
if( isNullObject() ){
return JSONNull.getInstance()
.toString();
}
try{
Iterator keys = keys();
StringBuffer sb = new StringBuffer( "{" );
while( keys.hasNext() ){
if( sb.length() > 1 ){
sb.append( ',' );
}
Object o = keys.next();
sb.append( JSONUtils.quote( o.toString() ) );
sb.append( ':' );
sb.append( JSONUtils.valueToString( this.properties.get( o ) ) );
}
sb.append( '}' );
return sb.toString();
}catch( Exception e ){
return null;
}
}
[code="java"]
package com.xy51wan.bean;
import net.sf.json.JSONObject;
public class Basic_Action_Bean {
private String action;
private JSONObject parameters;
public Basic_Action_Bean(String json) {
JSONObject jo = JSONObject.fromObject(json);
action = jo.getString("action");
//if (jo.get("parameters") != null) {
parameters = JSONObject.fromObject(jo.get("parameters"));
//}
jo = null;
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
public JSONObject getParameters() {
return parameters;
}
public Object getParameter(String key){
//因为parameters 是一个JSONObject对象,当然不等于null
if(parameters != null){
//这里打印的时候会调用parameters.toString()方法,返回null
System.out.println("aa :: " + parameters);
//后面的就不用说了,当然都不相等
System.out.println("bb :: " + parameters.equals("null"));
System.out.println("cc :: " + (parameters == null));
System.out.println("dd :: " + (parameters.equals(null)));
}
return null;
}
public static void main(String args[]){
//Basic_Action_Bean b = new Basic_Action_Bean("{\"action\":\"getAA\",\"parameters\":{\"a\":100,\"b\":\"2009-04-07\"}}");
Basic_Action_Bean b = new Basic_Action_Bean("{\"action\":\"getAA\"}");
b.getParameter("a");
}
}
[/code]