Java JSON字符串转JSON对象出现的问题

案例:

java定义一个标准的json字符串:

String jsonStr = "{\"status\":0}";


尝试使用net.sf.json.JSONObject或com.alibaba.fastjson.JSONObject进行转码:

net.sf.json.JSONObject obj1 = net.sf.json.JSONObject.fromObject(jsonStr);
com.alibaba.fastjson.JSONObject obj2 = com.alibaba.fastjson.JSONObject.parseObject(jsonStr);


不可思议的是,两种转换方式均出现了异常:

Exception in thread "main" net.sf.json.JSONException: A JSONObject text must begin with '{' at character 1 of {"status":0}
	at net.sf.json.util.JSONTokener.syntaxError(JSONTokener.java:505)
	at net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:1144)
	at net.sf.json.JSONObject._fromString(JSONObject.java:1373)
	at net.sf.json.JSONObject.fromObject(JSONObject.java:161)
	at net.sf.json.JSONObject.fromObject(JSONObject.java:130)
	at io.rong.util.HttpUtil.main(HttpUtil.java:235)
Exception in thread "main" com.alibaba.fastjson.JSONException: syntax error, pos 2
	at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1240)
	at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1153)
	at com.alibaba.fastjson.JSON.parse(JSON.java:102)
	at com.alibaba.fastjson.JSON.parse(JSON.java:93)
	at com.alibaba.fastjson.JSON.parseObject(JSON.java:164)
	at io.rong.util.HttpUtil.main(HttpUtil.java:236)


于是我们寻找原因,为何一个标准的json字符串却不能直接转换成JSONObject对象?

于是乎我将字符串转换成Char数组以单个字符输出:

String jsonStr = "{\"status\":0}";
char str[] = jsonStr.toString().toCharArray();
		
for (int i = 0; i < str.length; i++) {
    System.out.print(str[i] + " ");
}

意外的发现控制台会多输出两个“.”

同样,我们再定义一个字符串,并输出长度:

String jsonStr = "jsonStr";


理论上字符串“jsonStr”的长度应该为7,但实际输出的长度为何是9?而通过char字符输出时,为何会有两个“.”?这个问题抛给接下来的读者自己去探索。

解决方案:

将字符串Unicode解码或通过String的substring(2)方法截取字符串后,后再进行转换,完整代码如下:

        /**
	 * @Description: main测试方法
	 * @author Jason.Lau 2015年7月30日
	 * @param args
	 */
	public static void main(String[] args) {
		String strString = "{\"status\":0}".substring(2);
		net.sf.json.JSONObject obj = net.sf.json.JSONObject.fromObject(strString);
		System.out.println("status=> " + obj.getString("status"));
	}


问题得以解决!

猜你喜欢

转载自blog.csdn.net/LiuZhi66/article/details/47146785