【发布时间】:2017-10-07 05:15:05
【问题描述】:
我正在使用的 API 使用 base64 编码的 ruby 哈希(类似于 json 对象,但专门针对 ruby)响应,该哈希在 base64 编码之前已转换为字符串
从javascript中检索编码字符串后,解码后我得到一个与它在服务器上起源的ruby字符串形状相同的字符串
// Decoded example String
"{:example=>'string',:another_example=>'string'}"
我能够使用字符串替换和 eval() 将 ruby 字符串解析为 JSON 对象,但我知道 eval() 是邪恶的。此外,没有办法处理将来可能出现的任何其他键值对。
在没有 eval 和直接字符串替换的情况下应该如何重写?
var storedToken = base64url.decode(window.localStorage.authtoken).replace(':example=>', 'example:').replace(':another_example=>', 'another_example:')
var parsedTokenString = JSON.stringify(eval('(' + storedToken + ')'))
var newJsonObject = JSON.parse(parsedTokenString)
【问题讨论】:
-
@SiddharthNand 除了标题之外没有什么相似之处
-
更改标题以防万一。
-
如果服务器在你的控制之下,通过
.to_json在json包中将其转换为json 应该是一个更好的主意。 -
这是副本,但该问题还没有答案。 stackoverflow.com/questions/35109343/…
-
如果您更新了字符串替换以双引号引用属性名称并将值的单引号转换为双引号,我认为您将拥有有效的 JSON,然后您可以直接传递给
JSON.parse()而无需eval()。请注意,在代码中,您已经拥有.stringify()和.parse()是多余的,因为eval()将已经返回所需的对象。 (顺便说一句,there is no such thing as a "JSON object"。)
标签: javascript json