当我尝试从服务器上获取响应时收到以下错误:
JSON
Error: org.json.JSONException: A JSONObject text must begin with '{' at 1 [character 2 line 1]
客户端是用Objective C编写的IOS应用程序。我发送的NSString具有以下编码:
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
这是NSString的nslog输出:
{
"longitude" : "-122.03121860000000253876",
"latitude" : "37.33233141000000188114"
}
这是我在java服务器上的get函数:
@GET
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public String get(String result) throws JSONException, IOException {
JSONObject sit = null;
try {
System.out.println(result + "JSON");
sit = new JSONObject(result);
System.out.println("Success: json = ");
System.out.println(sit.toString(2));
} catch(JSONException ex) {
System.out.println("Error: " + ex);
}
return this.dBQ.getSItems(sit).toString();
}
我想知道你们是否可以指出我正确的方向。我非常能够从客户端获得服务器的响应。但由于某种原因,变量导致我的java函数(在服务器上)输出为空并吐出异常。
由于
答案 0 :(得分:0)
我必须查找org.json.JSONObject
- 这是Android API,对吧?为什么在后端使用它?
无论如何,看看你使用的构造函数的JavaDoc,它说:
参数json String:包含对象的 JSON编码的字符串。
你的result
字符串已经被JAX-RS解析了,所以它只是没有花括号的裸文本。所以我说这就是你获得例外的原因。
就像我提到的,我真的不懂Android API,但是如果你真的必须使用它,你应该先尝试JSONObject.quote(String)
将字符串包装起来然后再传递给构造函数。
答案 1 :(得分:0)
实际上我回答了我自己的问题,我使用了以下代码的帖子请求:
private DBQuery dBQ = new DBQuery();
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public String getresponses(String si) {
return this.dBQ.getItems(si).toString();
}