我需要获取脚本标记中函数中存储的JSON字符串的值,如下所示:
<script type="text/javascript">
my.function("bar", {"foo1": false, "foo2": true, "foo3": "foobar!"});
</script>
我可以使用Mechanize来获取特定标签,如下所示:
parser.xpath("//script[ contains(text(), 'my.function')]").text
但我不确定如何从那里开始。如何提取字符串的JSON部分并将其转换为哈希,以便我可以提取值?
答案 0 :(得分:2)
这是一个纯XPath 1.0解决方案:
使用强>:
concat('{',
substring-before(
substring-after(
substring-after(., 'my.function('),
'{'
),
');'
)
)
基于XSLT的验证:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:copy-of select=
"concat('{',
substring-before(
substring-after(
substring-after(., 'my.function('),
'{'
),
');'
)
)
"/>
</xsl:template>
</xsl:stylesheet>
将此转换应用于提供的XML文档:
<script type="text/javascript">
my.function("bar", {"foo1": false, "foo2": true, "foo3": "foobar!"});
</script>
评估XPath表达式(上面)并输出结果:
{"foo1": false, "foo2": true, "foo3": "foobar!"}
答案 1 :(得分:1)
如果表单没有改变,你可以
JSON.parse(/\{.*\}/.match(txt)[0])
使用json
gem。请注意,有几个失败点 - 要么检查每个步骤,要么在某处放置一个好的rescue
。