JSON.parse无法从字符串创建对象

时间:2017-01-15 04:22:47

标签: javascript ruby-on-rails json ruby

我在rails上使用ruby来创建一个cookie,该cookie将包含请求的params的数组作为字符串返回给视图。但是,当我JSON.parse该字符串时,我收到以下错误:

JSON.parse('%7B%22specialty%22%3A%5B%22Anesthesiology%22%5D%7D')

Uncaught SyntaxError: Unexpected token % in JSON at position 0

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

该字符串无效json。

它是uri编码的,因此使用decodeURIComponent()

对其进行解码
JSON.parse(decodeURIComponent('%7B%22specialty%22%3A%5B%22Anesthesiology%22%5D%7D'))

答案 1 :(得分:1)

您需要使用decodeURIComponent来首先解码字符串。

JSON.parse(decodeURIComponent(
  '%7B%22specialty%22%3A%5B%22Anesthesiology%22%5D%7D'
));

由于字符串已编码。解码后,您将获得键值对,即字符串形式的对象。现在,您可以使用JSON.parse来构建Javascript对象。

答案 2 :(得分:1)

其他答案在说有效负载是URI编码时是正确的,但decodeURIComponent只是一种javascript方法。要将其解码为ruby-side,请使用URI.unescape

JSON.parse(URI.unescape('%7B%22specialty%22%3A%5B%22Anesthesiology%22%5D%7D'))

您说您正在使用rails,因此URI对象应该已经可用,但如果您没有使用rails,则首先需要require 'uri'