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格式来看,我们定义的json字符串没问题,但是为何一个标准的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 Zack 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"));
	}


 

问题得以解决!

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HiiZack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值