【问题标题】:javascript parse string as object or JSONjavascript 将字符串解析为对象或 JSON
【发布时间】:2013-05-12 03:56:37
【问题描述】:

我希望能够在 html 元素中定义一个哈希对作为属性,然后将其解析为一个对象,以便由 javascript 处理。

示例:

<div id="test" mydata="{'xkey':'xval','ykey':'yval'}">

<script>
var mydata = JSON.parse($('#test').attr('mydata'));
console.log(mydata.xkey);
</script>

但问题是它没有被转换为对象并且输出未定义。

我怎样才能做到这一点??

【问题讨论】:

  • 那不是 JSON。你需要双引号。
  • 供参考:jsonlint.com 在此处粘贴您的 JSON,它会告诉您出了什么问题

标签: javascript


【解决方案1】:

使用双引号代替,将键和字符串值括起来:

mydata='{"xkey":"xval","ykey":"yval"}'

演示: http://jsfiddle.net/reAtQ/

如果你必须保留环绕双引号,你可以编码内部的:

mydata="{&quot;xkey&quot;:&quot;xval&quot;,&quot;ykey&quot;:&quot;yval&quot;}"

演示: http://jsfiddle.net/reAtQ/1/

或者,你可以replace所有单引号加双引号再解析:

var mydata = JSON.parse($('#test').attr('mydata').replace(/'/g, '"'));

演示: http://jsfiddle.net/reAtQ/2/

虽然请注意,如果任何键/值包含单引号,它们将被无意中替换。

参考:

【讨论】:

  • 谢谢,但是使用单引号来定义 html 元素属性可以接受吗?? - 如果是这样,这可能是唯一用单引号而不是双引号定义的属性。
  • @crankshaft 当然!您可以在 HTML(和 JavaScript)中混合和匹配单引号和双引号,只要这样做正确,但 JSON 规范规定字符串(哪些键是)必须用双引号括起来。您可以随时更改我的示例以使用周围的双引号,但转义每个内部双引号 - 当您可以通过用单引号包裹它来避免它时,没有必要进行所有转义
  • 问题是,维护 HTML 的人不是我,因为这可能是唯一的例外,我真的很想将属性引号保留为双引号以避免错误 /混乱,所以我想唯一的方法是用双引号全局替换单引号?
  • @crankshaft 好吧,我更新了我的答案,你可以使用什么:)
  • 非常感谢,我将使用全局替换。
猜你喜欢
  • 1970-01-01
  • 2013-03-12
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
相关资源
最近更新 更多