我无法找到解决方案,我已经被困了几个小时,我想我错过了一些东西。
我有这段代码:
var s = hash.split("=").join(' : ');
var s_object = JSON.parse(s);
$('.row').prepend(s_object);
变量名为' s'包含一个字符串,如
' {"家具" :" 9","衣服" :" 5"}'
执行上述脚本时,' s_object'不会成为哈希。但是当我做以下事情时:
var s = '{"furnitures" : "9", "clothes" : "5"}';
var s_object = JSON.parse(s);
$('.row').prepend(s_object);
或
var s_object = JSON.parse('{"furnitures" : "9", "clothes" : "5"}');
$('.row').prepend(s_object);
一切正常。知道是什么原因造成的吗?
谢谢!
以下是我的脚本的确切代码:
var hash = '<%= @inventory.types %>';
var s = hash.split("=>").join(' : ');
var s_object = JSON.parse(s);
&lt;%= @ inventory.types%&gt;是序列化的rails属性(哈希)
&#39;散列&#39;包含一个字符串,例如&#39; {&#34;家具&#34; =&gt;&#34; 9&#34;,&#34;衣服&#34; =&gt;&#34; 5&#34;} &#39;
我不得不使用hash.split(&#34; =&gt;&#34;)成功捕获大于号的符号。
除非s值是硬编码的,否则s_object不会成为对象。
如果您需要更多信息,请与我们联系。
答案 0 :(得分:0)
您可以使用&#34;替换&#34; javascript内置函数使其看起来像JSON字符串,然后将其转换为JSON对象:
var hash = '{"furnitures"=>"9", "clothes"=>"5"}';
var result = hash.replace(/=>/g, ':');// {"furnitures":"9", "clothes":"5"}
我更新的解决方案:
var hash = '{"furnitures"=>"9", "clothes"=>"5"}';
var result = hash.replace(/=>/g, ':');
var s_object = JSON.parse(result);
for(var i in s_object){
$('.row').prepend(i + " : " + s_object[i] + "<br/>");
}
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<div class = "row"></div>
&#13;