jQuery字符串在硬编码时被解析为对象,但在分配给变量时则不会

时间:2016-11-12 15:31:02

标签: jquery ruby-on-rails json parsing

我无法找到解决方案,我已经被困了几个小时,我想我错过了一些东西。

我有这段代码:

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("=&gt;").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不会成为对象。

如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

您可以使用&#34;替换&#34; javascript内置函数使其看起来像JSON字符串,然后将其转换为JSON对象:

var hash = '{"furnitures"=>"9", "clothes"=>"5"}';
var result = hash.replace(/=>/g, ':');// {"furnitures":"9", "clothes":"5"}

我更新的解决方案:

&#13;
&#13;
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;
&#13;
&#13;