PHP:将HTML表解析为JSON

时间:2013-11-04 23:25:49

标签: php html json parsing dom

我有一个想要解析为JSON的HTML表。

<table class="valas" border="0">
        <tr>
            <th>Mata Uang</th><th>Jual</th><th>Beli</th>
        </tr><tr class="odd">
            <td>USD</td><td class="number">11.450,00</td><td class="number">11.300,00</td>
        </tr><tr class="even">
            <td>AUD</td><td class="number">11.094,00</td><td class="number">10.494,00</td>
        </tr><tr class="odd">
            <td>CAD</td><td class="number">11.169,00</td><td class="number">10.669,00</td>
        </tr><tr class="even">
            <td>CHF</td><td class="number">12.719,00</td><td class="number">12.219,00</td>
        </tr><tr class="odd">
            <td>EUR</td><td class="number">15.678,00</td><td class="number">15.028,00</td>
        </tr><tr class="even">
            <td>GBP</td><td class="number">18.525,00</td><td class="number">17.725,00</td>
        </tr><tr class="odd">
            <td>HKD</td><td class="number">1.643,00</td><td class="number">1.293,00</td>
        </tr><tr class="even">
            <td>JPY</td><td class="number">118,87</td><td class="number">113,37</td>
        </tr><tr class="odd">
            <td>SAR</td><td class="number">3.233,00</td><td class="number">2.833,00</td>
        </tr><tr class="even">
            <td>SGD</td><td class="number">9.454,00</td><td class="number">8.854,00</td>
        </tr>
    </table>

我有一些我在google搜索中找到的PHP代码:

<?php
include("simple_html_dom.php");
$html = file_get_html('index.html');
$row_count=0;
$json = array();
foreach ($html->find('tr') as $row) {
        $currency = $row->find('td',0)->innertext;
        $sell = $row->find('td',1)->innertext;
        $buy = $row->find('td',2)->innertext;

        $json[$currency][$sell][$buy]=true;
    }
    echo json_encode($json);
   ?>

我得到的是代码,似乎错了:

 {
"":{
    "":{
        "":true
    }
},
"USD":{
    "11.450,00":{
        "11.300,00":true
    }
},
"AUD":{
    "11.094,00":{
        "10.494,00":true
    }
},
"CAD":{
    "11.169,00":{
        "10.669,00":true
    }
},
"CHF":{
    "12.719,00":{
        "12.219,00":true
    }
},
"EUR":{
    "15.678,00":{
        "15.028,00":true
    }
},
"GBP":{
    "18.525,00":{
        "17.725,00":true
    }
},
"HKD":{
    "1.643,00":{
        "1.293,00":true
    }
},
"JPY":{
    "118,87":{
        "113,37":true
    }
},
"SAR":{
    "3.233,00":{
        "2.833,00":true
    }
},
"SGD":{
    "9.454,00":{
        "8.854,00":true
    }
}
}null

但我需要的是:

 [{
"currency":"USD"{
    "sell":"11.450,00"
    "buy":"11.300,00"
},
"currency":"AUD"{
    "sell":"11.094,00"
    "buy":"10.494,00"
},
"currency":"CAD"{
    "sell":"11.169,00"
        "buy":"10.669,00"
},
"currency":"CHF"{
    "sell":"12.719,00"
    "buy":"12.219,00"
},
"currency":"EUR"{
    "sell":"15.678,00"
    "buy":"15.028,00"
},
"currency":"GBP"{
    "sell":"18.525,00"
    "buy":"17.725,00"
},
"currency":"HKD"{
    "sell":"1.643,00"
    "buy":"1.293,00"
},
"currency":"JPY"{
    "sell":"118,87"
    "buy":"113,37"
},
"currency":"SAR"{
    "sell":"3.233,00"
    "buy":"2.833,00"
},
"currency""SGD"{
    "sell":"9.454,00"
    "boy":"8.854,00"
}
}]

我认为问题出在$ json变量中,但很难完成。

3 个答案:

答案 0 :(得分:4)

虽然你需要什么是无效的JSON,但你可以通过这种方式实现正确的结构:

$json[] = [ 'currency' => $currency, 'sell' => $sell, 'buy' => $buy ];

答案 1 :(得分:0)

我相信这就是你想要的......

更改此行:

$json[$currency][$sell][$buy]=true;

为:

$json[$row_count]['currency'] = $currency;
$json[$row_count]['sell'] = $sell;
$json[$row_count]['buy'] = $buy;

$row_count++;

答案 2 :(得分:0)

如果你从这里得到代码: https://github.com/tremblay/HTML-Table-to-JSON 你可以得到你想要的答案:

htmlToJSON('index.html',FALSE,null,null,array(0 =&gt;'Currency',1 =&gt;'Buy',2 =&gt;'Sell'),null,null,TRUE) ;