代码之家  ›  专栏  ›  技术社区  ›  George V.M.

为什么会这样WebView.evaluateJavascript文件()是否删除转义字符?

  •  1
  • George V.M.  · 技术社区  · 6 年前

    我有一个字符串化的JSON对象,我想把它作为字符串传递到我的WebView中。如果我的JSON字符串是这样一个简单的一级JSON:

    JSONObject object = new JSONObject;
    object.put("key1", "val1");
    object.put("key2", "val2");
    String myValue = object.toString();
    

    evaluateJavascript 这样地:

    webView.evaluateJavascript("console.log('" + myValue + "')", null)
    

    我得到的控制台日志是:

    {"key1": "val1", "key2", "val2"}
    

    JSONObject object = new JSONObject();
    object.put("key1", "val1");
    JSONObject innerObject = new JSONObject();
    innerObject.put("key3","val3");
    object.put("key2", innerObject);
    String myValue = object.toString();
    

    也一样跑 评估JavaScript

    {"key1":"val1", "key2": "{"key3": "val3"}"}
    

    这不是我所期望的!我期待这样的输出:

    {"key1":"val1", "key2": "{\"key3\": \"val3\"}"}
    

    内部JSON的引号应该转义。如果他们没有逃脱,那就试着 JSON.parse 它将导致分析错误。

    我甚至使用了一个调试器来检查 myValue 就在它被传递到

    "{"key1":"val1", "key2": "{\"key3\": \"val3\"}"}"
    

    那么为什么跑步 评估JavaScript

    注:

    唯一能解决这个问题的方法就是在 评估JavaScript

    myValue.replace("\\", "\\\\")
    

    也就是说,替换任何转义字符( \ \\ ). 这样,神秘的剥离将删除一个逃逸字符,但留下另一个在那里,使我能够成功 JSON.parse文件 是的。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Saikrishna Rajaraman    6 年前

    在使用javascript接口时,可以使用URLEncode对内容进行编码。

    URLEncoder.encode(contents, "UTF-8");
    

    decodeURIComponent(contents.replace(/\+/g, '%20'));