设置:
在页面上,在隐藏的div中,是一个格式良好的JSON对象。
作为此对象的一部分,某些值是HTML,在此HTML中,双引号是HTML编码的,如下所示:"addtionalInfo": "If you need more help, please visit <a href="http://www.google.com">Google</a>"
稍后在页面上,我正在尝试编写将读取此对象的JS,以便可以完成其他很酷的事情。
问题: innerHTML似乎是隐式解码引号,这意味着JSON.parse()(以及类似的jQuery选项)失败,因为语法很糟糕。我不能替换()引号,因为它们以适当的JSON方式遍布整个地方。
示例:
<span class="hiddenField" id="TheJSONObject">
{ "thing" : "thingvalue", "badthing" : "a <a href="http://www.google.com">link!</a>", "lastthing" : "lastthingvalue" }
</span>
<script>
var newobj = JSON.parse(document.getElementById("TheJSONObject").innerHTML.trim());
alert(newobj.thing);
来自控制台的证明(CHROME):
console.log(document.getElementById("TheJSONObject").innerHTML)
{ "thing" : "thingvalue", "badthing" : "a <a href="http://www.google.com">link!</a>", "lastthing" : "lastthingvalue" }
问题: 有没有办法获得实际的原始innerHTML而没有JS试图给我这样的善意,以便JSON.parse()可以工作?
答案 0 :(得分:2)
这完全不可能。您有一个<span>
,而不是<script>
或其他被视为文字文字的内容,因此"
和"
之间没有区别。你需要正确编码才能开始;这可能意味着对包含HTML编码值的JSON编码对象进行HTML编码,以输出为HTML。
如果您无法修改该输出,那么您可以获得的最接近的可能是发出(XHR)请求并在实体完整的情况下手动解析它。