0

我的问题是转义字符使我的 JSON 无效。我将我的 JSON 发送到 Rails 服务器,但是当它到达时,它会获得一些转义字符。

我可以做些什么来在我的 restfull 课程上解决这个问题,还是在服务器端进行纠正?

这是我发送的 JSON,

[session={"password":"********","email":"********@omobile.com.br"}]

这是出现在服务器日志上的 JSON:

{"session"=>"{\"password\":\"********\",\"email\":\"********@omobile.com.br\"}"}

我尝试了这些不同的方式来发送我的 JSON,结果是一样的:

JSONObject object = new JSONObject();
object.accumulate("email", username);
object.accumulate("password", password);
String jsonString = object.toString();

Session session = new Session();
session.setEmail(username);
session.setPassword(password);
Gson gson = new Gson();
String jsonString = gson.toJson(session, Session.class);
4

1 回答 1

1

发生的事情是一团糟,因为您发布的字符串实际上都不是 JSON。第一个实际上我不知道它是什么,而第二个可能意味着在 Ruby 端你有这个 Ruby 哈希,其中键“会话”指的是 JSON 编码的哈希。

由于您没有发布代码,我们无法判断网络上发生了什么,因此我们无法判断您的服务器是否需要一个表单编码的请求正文、一个多部分的请求正文,或者直接是一个 JSON 编码的对象。

我希望您考虑到我看到的唯一 JSON 是以下部分:

{"password": "********","email":"********@omobile.com.br"}

正如我所说,这可以按原样传递,也可以作为多信封的一部分传递,甚至可以通过 url 编码传递。该格式确实在服务器上建立。例如,我使用 Apache HttpClient 做了一个快速测试:

public class GsonSendToSinatra {

    private static class Session {
        @SuppressWarnings("unused")
        String username, password;
    }

    public static void main(String[] args) throws Exception {
        Session session = new Session();
        session.username = "foo@example.com";
        session.password = "qwerty1234";

        Gson gson = new Gson();

        String responseText = Request.Post("http://localhost:4567/echo")
            .bodyString(gson.toJson(session), ContentType.APPLICATION_JSON)
            .execute()
            .returnContent()
            .asString();

        System.out.println(responseText);
    }
}

和服务器上的 Sinatra:

require 'sinatra'
require 'json'

post '/echo' do
  content_type "text/plain"
  layout false

  session = JSON.parse request.body.read

  session.map {|k,v| "#{k}: #{v}\n"}
end

我希望这个例子能帮助你弄清楚 HTTP 对话中的移动部分是什么,以及如何组合它们。

于 2013-03-04T23:36:08.897 回答