使用Javascript中包含的JSON数据从HTML中检索变量

时间:2015-06-30 11:19:16

标签: javascript php html json

我有一个简单的HTML文件,其中包含我试图删除的数据,以便我可以处理这些变量。

<html>
<head>
    <link rel="stylesheet" type="text/css" href="/app/css/style.css" />
</head>
<body>
    <div class="page">
        <div class ="pane">
            <div class ="chart">
                <h1 style='float: left;'>Summary</h1>
                <div style='clear: both;'></div>

                <script type="text/javascript" src="protovis/protovis-d3.2.js"></script>
                <script type="text/javascript+protovis">var data = [
                {"label":"A (2)", 'complete': 2.0, 'pending': 0.0}
                ,{"label":" B (8)", 'complete': 8, 'pending': 0.0}
                ,{"label":"C (10)", 'complete': 10, 'pending': 0.0}
                ,{"label":"D (18)", 'complete': 18.0, 'pending': 0.0}
                ,{"label":"E (21)", 'complete': 21, 'pending': 0.0}
                ];
                </script>
            </div>
        </div>
    </div>  
</body>
</html>

使用PHP,我试图将此HTML中包含的数据解析为变量。 I.E。:$A = 2$B = 8$C = 10$D = 18$E = 21

到目前为止,我一直在尝试使用simple_html_dom.php库来读取数据,但我还没有能够检索上面JavaScript中包含的JSON的内容。

如何从上面的HTML中提取"label":"A (2)"以便我可以将值(在本例中为2)作为PHP变量访问?

3 个答案:

答案 0 :(得分:0)

  

试试这个

var data = [
                {"label":"A (2)", 'complete': 2.0, 'pending': 0.0}
                ,{"label":" B (8)", 'complete': 8, 'pending': 0.0}
                ,{"label":"C (10)", 'complete': 10, 'pending': 0.0}
                ,{"label":"D (18)", 'complete': 18.0, 'pending': 0.0}
                ,{"label":"E (21)", 'complete': 21, 'pending': 0.0}
                ];

output

for(var i =0; i <= data.length; i++){
    alert(data[i]['label']);
    }

答案 1 :(得分:0)

我用file_get_contents()解决了这个问题。

注意: 解析实际上只是一个快速而肮脏的解决方案。只有在文件中只有一个[和一个]必须标记json-string时,它才有效。所以如果你需要在很多文件上使用它,你应该使用另一种解析方法。

  1. 将html读成字符串:
  2. $html = file_get_contents("my_file.html");

    1. 解析你的html for json-string(就像注意到这是一个不好的做法,只是一个快速而又脏的解决方案来解决你的确切问题):
    2. $json = substr($html, strpos($html, '[') , strpos($html, ']') - (strpos($html, '[')-1));

      1. 用双引号替换单引号(因为需要双引号使字符串有效json):
      2. $json = str_replace("'", "\"", $json);

        1. 使用json_decode将您的json转换为php数组。注意:您需要将第二个参数设置为true才能使用“关联模式”:
        2. $my_array = json_decode($json, true);

          在这里,当你执行var_dump($my_array)时,你会发现所有内容都保存在php数组中:

          array(5) {
            [0]=>
            array(3) {
              ["label"]=>
              string(5) "A (2)"
              ["complete"]=>
              float(2)
              ["pending"]=>
              float(0)
            }
            [1]=>
            array(3) {
              ["label"]=>
              string(6) " B (8)"
              ["complete"]=>
              int(8)
              ["pending"]=>
              float(0)
            }
            ...
          ]
          

答案 2 :(得分:0)

使用 PHP Simple HTML DOM Parser ,您可以执行以下操作,将label data内的DOM object值解析为变量。

使用以下方法之一创建// Create a DOM object from a string $html = str_get_html('<html><body>Hello!</body></html>'); // Create a DOM object from a URL $html = file_get_html('http://www.google.com/'); // Create a DOM object from a HTML file $html = file_get_html('test.htm');

URL

您选择哪一个取决于您的情况,因为我不知道您是从file或文件string甚至DOM object获取的,我认为我列出了它们所有。但这无关紧要。

现在,如果您设置了// save the second occurrence of script tag in $ret. $ret = $html->find('script', 1); // use preg_match_all to find what you are looing for, // you might want to adjust the regex to fit your needs, but this will work for now. preg_match_all("/\"label\"\s*:\s*([^}]+)/", $ret, $out); // know loop over matched result and adjust the string to be parsed to a variable. foreach($out[1] as $key => $value) { $out[1][$key] = str_replace([' ','(',')','"'],['','=','',''] , substr($value, 0, strpos($value, ','))); parse_str($out[1][$key]); } // now you can do: print_r($A); // 2 print_r($B); // 8 print_r($C); // 10 print_r($D); // 18 print_r($E); // 21 ,请执行以下操作。

ternary

希望有所帮助。