JSONObject未被服务器解析

时间:2015-04-26 18:57:37

标签: android ruby-on-rails json retrofit

我正在构建API,当我发送这样的请求时:

POST http://myserver.dev

{
"id": "1",
"string1": "hello",
"string2": "world"
}

一切按预期运行,使用curl和Postman进行测试。但是,使用我的Android代码,请求失败:

    JSONObject jsonObject = new JSONObject();
    try {
        jsonObject.put("id", "1");
        jsonObject.put("string1", "hello");
        jsonObject.put("string2", "world");
    }
    catch (JSONException e)
    {
        e.printStackTrace();
    }
    String jsonString = jsonObject.toString();

服务器给我这个错误:

JSON::ParserError (757: unexpected token at '"{\"id\":\"1\",\"string1\":\"hello\",\"string2\":\"world\"}"'):

好像这个jsonObject没有给我预期的json字符串。任何想法在这里发生了什么?

来自logcat的完整HTTP请求如下:

04-26 15:23:56.468  21013-21669/com.johncorser.s D/Retrofit﹕ ---> HTTP POST http://api.s.com/games
04-26 15:23:56.469  21013-21669/com.johncorser.s D/Retrofit﹕ X-Authorization: 10155399143045080
04-26 15:23:56.469  21013-21669/com.johncorser.s D/Retrofit﹕ Content-Type: application/json; charset=UTF-8
04-26 15:23:56.469  21013-21669/com.johncorser.s D/Retrofit﹕ Content-Length: 95
04-26 15:23:56.469  21013-21669/com.johncorser.s D/Retrofit﹕ {"nameValuePairs":{"id":"1","string1":"hello","string2":"world"}}
04-26 15:23:56.469  21013-21669/com.johncorser.s D/Retrofit﹕ ---> END HTTP (95-byte body)

从服务器日志:

2015-04-26T19:26:39.371386+00:00 app[web.1]:   Parameters: {"_json"=>"{\"id\":\"1\",\"string1\":\"hello\",\"string2\":\"world\"}", "game"=>{}}
JSON::ParserError (757: unexpected token at '"{\"id\":\"1\",\"string1\":\"hello\",\"string2\":\"world\"}"'):

1 个答案:

答案 0 :(得分:0)

这最终是Retrofit在发布之前序列化对象的结果。

我最终从使用JSONObject切换到HashMap<String, String>而没有调用任何.toString()方法,Retrofit负责其余的工作。