0

I have a HTML table that want to parse to JSON.

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

And I have some PHP code that i found from googling:

<?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);
   ?>

And what I got is for the code, it seems wrong:

 {
"":{
    "":{
        "":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

But what I need is:

 [{
"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"
}
}]

I think the problem is in $json variable but it hard to make it done.

4

3 回答 3

4

Though what you need is not valid JSON, you can achieve the right structure this way:

$json[] = [ 'currency' => $currency, 'sell' => $sell, 'buy' => $buy ];
于 2013-11-04T23:30:38.963 回答
1

If you get the code from here: https://github.com/tremblay/HTML-Table-to-JSON you can get the answer you want like this:

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

于 2013-11-14T10:46:17.783 回答
0

I believe this is what you want.....

change this line:

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

to:

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

$row_count++;
于 2013-11-04T23:30:30.307 回答