Javascript 从JSON数据属性获取键值

Javascript 从JSON数据属性获取键值,javascript,ruby-on-rails,Javascript,Ruby On Rails,我的Rails应用程序中有一个表单,其中包含一个select。select中的每个选项都有一个数据属性data contact,其中包含我想在Javascript中使用的其他信息。该信息是JSON格式的,因此,如果查看HTML代码,它如下所示: <option data-contact="{"street"=>"Postbus 123", "street_number"=>"12", "zipcode"=>"6547 JN", "city"=>"Tilburg"}"

我的Rails应用程序中有一个表单,其中包含一个select。select中的每个选项都有一个数据属性data contact,其中包含我想在Javascript中使用的其他信息。该信息是JSON格式的,因此,如果查看HTML代码,它如下所示:

<option data-contact="{"street"=>"Postbus 123", "street_number"=>"12", "zipcode"=>"6547 JN", "city"=>"Tilburg"}"></option>
<option data-contact="{"street":"Postbus 123", "street_number":"12", "zipcode":"6547 JN", "city":"Tilburg"}"></option>

我怎样才能做到这一点?我应该改变Javascript解析JSON的方式,还是应该改变Rails将数据格式化为JSON的方式?

我同意@Andy和@Java_user的观点,但我也认为问题在于您的输出JSON包含引号,因此您的选项元素被解析为:

<option data-contact="{" street "=>" Postbus 123 ", " street_number "=>" 12 ", " zipcode "=>" 6547 JN ", " city "=>" Tilburg "}"></option>
这就行了

var jsonString = $('#invoice_contact_id option:selected')
                    .attr("data-contact")
                    .split('=>')
                    .join(':');
var details = JSON.parse(jsonString);
alert(details.street);

更改Rails输出,因为它不是有效的JSON。JSON字符串已标准化。您需要将=>替换为:Agree,我更改了Rails中的解析以获取有效的JSON。Agree,我更改了Rails中的JSON解析以获取有效的JSON,然后我就能够正确获取Javascript中的值。我喜欢你的编码选项。
<option data-content="eyJzdHJlZXQiPT4iUG9zdGJ1cyAxMjMiLCAic3RyZWV0X251bWJlciI9PiIxMiIsICJ6aXBjb2RlIj0+IjY1NDcgSk4iLCAiY2l0eSI9PiJUaWxidXJnIn0="></option>
var b64 = $('#invoice_contact_id option:selected').attr('data-contact');
var json = window.atob(b64).replace(/\=\>/g, ':');    // And this removes the problem of '=>'
details = JSON.parse(json);
alert(details.street);
var jsonString = $('#invoice_contact_id option:selected')
                    .attr("data-contact")
                    .split('=>')
                    .join(':');
var details = JSON.parse(jsonString);
alert(details.street);