首页 > json的本质是字符串,那么可以通过url加参数的方式传递json字符串吗

json的本质是字符串,那么可以通过url加参数的方式传递json字符串吗

localhost:8080/Root/main.jsp?json=XXX
为啥这样传会报错呢 错误消息如下
net.sf.json.JSONException: Found starting '[' but missing ']' at the end. at character 0 of null
net.sf.json.util.JSONTokener.syntaxError(JSONTokener.java:499)
net.sf.json.util.JSONTokener.(JSONTokener.java:82)
net.sf.json.JSONObject._fromString(JSONObject.java:1201)
net.sf.json.JSONObject.fromObject(JSONObject.java:165)
net.sf.json.JSONObject.fromObject(JSONObject.java:134)
com.baidu.test.mysql.test.doGet(test.java:37)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)


这个字符串是怎么写的http://localhost:8080/ROOT/test?test={"Date":"ds","Lon":"0.0","Lat":"1.0","Voice":[{"filename":"IMG20140713101209.jpg"}],"Picture":[{"filename":"IMG20140713101209.jpg"}],"Video":[{"filename":"IMG20140713101209.jpg"}]}

NSString *str = @"http://localhost:8080/ROOT/test?test={"Date":"ds","Lon":"0.0","Lat":"1.0","Voice":[{"filename":"IMG20140713101209.jpg"}],"Picture":[{"filename":"IMG20140713101209.jpg"}],"Video":[{"filename":"IMG20140713101209.jpg"}]}" 吗?这好像不正确吧!


我已经解决了,最终发现的问题是在url拼接的时候json部分最开始的那个字符是"{",而不是正常json的"[",最后一个字符情况也一样。参数如下:
http://localhost:8080/ROOT/test?test={"Date":"ds","Lon":"0.0","Lat":"1.0","Voice":[{"filename":"IMG_20140713_101209.jpg"}],"Picture":[{"filename":"IMG_20140713_101209.jpg"}],"Video":[{"filename":"IMG_20140713_101209.jpg"}]}

里面还有几个带[]的值,但是没有影响到生成最外层的jsonobject,我想是因为json嵌套的原因。

还有在服务端接收到json的字符之后,还需要对转义字符做处理,用java替换字符的函数(replaceAll)将双引号替换为反斜杠加双引号。
代码这样写的:
String temp = request.getParameter("jsonString");
temp = temp.replaceAll("\"","\\"");
我这样做确实将jsonString转换成了JSONObject。
我现在知识储备和开发经验还不多,上面的回答是根据我现有的理解,如果回答有什么问题,欢迎诸位前辈批评指正~


jsonencode后还需要urlcode,或者直接base64加解密啦。


可以是可以,当然没问题,可是一般很少这样做。你这个错误看起来是JSON的格式不对而造成的


要URL编码

太长的字符串可以放进消息体里面用post传


当然可以啦,不过你需要注意:

  1. JSON字符串需要用urlencoding编码
  2. 对绝大多数HTTP client而言,URL长度都有上限,所以不能传太大的JSON,一般而言几K应该没问题,但是再长点就不好说了
【热门文章】
【热门文章】