Javascript innerHTML和静默解码的引号

Javascript innerHTML和静默解码的引号,javascript,json,innerhtml,Javascript,Json,Innerhtml,设置: 页面上隐藏的div中有一个格式良好的JSON对象 作为该对象的一部分,一些值是HTML,在该HTML中,双引号是HTML编码的,如:“addationalinfo”:“如果需要更多帮助,请访问a href=”http://www.google.com“谷歌/a” 在本页的后面,我将尝试编写JS来读取这个对象,这样就可以完成其他很酷的事情 问题是: innerHTML似乎隐式地解码引号,这意味着JSON.parse()(和类似的jQuery选项)由于语法错误而失败。我无法替换()引号,因为

设置:

页面上隐藏的div中有一个格式良好的JSON对象

作为该对象的一部分,一些值是HTML,在该HTML中,双引号是HTML编码的,如:
“addationalinfo”:“如果需要更多帮助,请访问a href=”http://www.google.com“谷歌/a”

在本页的后面,我将尝试编写JS来读取这个对象,这样就可以完成其他很酷的事情

问题是: innerHTML似乎隐式地解码引号,这意味着JSON.parse()(和类似的jQuery选项)由于语法错误而失败。我无法替换()引号,因为它们以正确的JSONy方式到处都是

例如:

<span class="hiddenField" id="TheJSONObject">


 { "thing" : "thingvalue", "badthing" : "a &lt;a href=&quot;http://www.google.com&quot;&gt;link!&lt;/a&gt;", "lastthing" : "lastthingvalue" }


</span>

<script>
var newobj = JSON.parse(document.getElementById("TheJSONObject").innerHTML.trim());
alert(newobj.thing);
问题是:
有没有什么方法可以获得实际的原始innerHTML,而不让JS像这样帮助我,让JSON.parse()工作?

这是完全不可能的。您有一个
,而不是
或任何其他被视为文字的文本,因此
之间没有区别。首先,您需要对其进行正确编码;这可能意味着HTML编码JSON编码的对象,该对象包含HTML编码的值,输出为HTML


如果您无法修改该输出,那么最接近的方法可能是发出(XHR)请求,并在实体完整的情况下手动解析它。

我不理解这个答案。问题不在于URL编码,而在于HTML编码;当我试图用innrHTML将它们放在一个盒子里时,它们就消失了。你能解释一下URI函数在这里有什么帮助吗?为什么(看起来)是唯一一个出现这种情况的实体?(并非我怀疑你的答案,我只是好奇你是否知道为什么与所有其他编码相比,它只是这种编码)@steegness:没有必要在引用的属性值之外转义引号,因此浏览器在重建
innerHTML
时不会转义引号。
console.log(document.getElementById("TheJSONObject").innerHTML) 


 { "thing" : "thingvalue", "badthing" : "a &lt;a href="http://www.google.com"&gt;link!&lt;/a&gt;", "lastthing" : "lastthingvalue" }