如何解析刮取的JSON字符串

时间:2011-12-26 03:09:05

标签: ruby regex ruby-on-rails-3 xpath mechanize

我需要获取脚本标记中函数中存储的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部分并将其转换为哈希,以便我可以提取值?

2 个答案:

答案 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