有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Gson fromJson(),来自OkHttp3的有效Json响应无效(已关闭)

我正在制作一个安卓应用程序(显然是Java),并将AsyncTask用于OkHttp3请求。我想将返回的json字符串解析为一个简单的消息对象,但它不起作用
我的答复如下:

String res_body_str = response.body().string(); // "{\"msg\":\"Do it!\"}"

当我试图用gson解析它时,它失败了
我总是喜欢java。lang.IllegalStateException:应为BEGIN_对象,但在第1行第2列为字符串

下面是我的一些代码:
我的异步任务类

protected Message doInBackground(Message...msg) {
    Message res;
    String req_body_str = g.toJson(msg[0]);
    String res_body_str;

    RequestBody body = RequestBody.create(JSON, req_body_str);
    Request request = new Request.Builder()
        .url(url)
        .post(body)
        .build();
    try {
        Response response = client.newCall(request).execute(); //client is static OkHttpClient
        res_body_str = response.body().string(); // "{\"msg\":\"Do it!\"}"
    } catch (IOException e) {
        res_body_str = "{\"msg\":\"Connection Failed. Try again later.\"}";
    }
    ////////Everything works to this point
    try {
        res = g.fromJson(res_body_str, Message.class); //ERROR
    } catch (Exception e) {
        res = new Message(res_body_str);
    }
    return res;
}

我的信息类

public class Message {

    private String msg;

    public Message(String msg) {
        this.msg = msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getMsg() {
        return msg;
    }
}

当我在第二个try/catch语句之前写入res_body_str = "{\"msg\":\"Do it!\"}";时,它会工作,但不会与响应一起工作

编辑1(只是为了清晰):
字符串是"{\"msg\":\"Do it!\"}",并且res_body_str.charAt(0);返回{

编辑2:
System.err.println(res_body_string);打印{"msg":"Do it!"} System.err.println(res_body_string.charAt(0));打印{ System.err.println(res_body_string.charAt(1));打印" System.err.println(res_body_string.charAt(2));打印m

编辑3:它可以工作
我让它工作了。我不得不替换"\

res_body_str = response.body().string().replaceAll("\"","");
res_body_str = res_body_str.replaceAll("\\\\","'");

正式的字符串是" "{\"msg\":\"Do it!\"}" ",但由于某些原因,没有打印出未转义的双QOUTE。我看到它时,我把所有逃出的双qoutes都换成了零


共 (0) 个答案