如何在有或没有第3方库的情况下将HTML表解析为Node.js中的json

时间:2018-09-26 19:10:18

标签: javascript json node.js

我从服务器收到以下响应,需要在有或没有其他库的情况下在NodeJS中将其转换为JSON格式。我知道这个话题曾被感动过几次,但找不到任何与好的答案匹配的东西。

<table class="sortable table">
    <tbody>
        <tr>
            <th width="5%">Rank</th>
            <th width="20%">Name</th>
            <th width="30%">Image</th>
            <th width="20%">Country</th>
            <th width="10%">Population</th>
        </tr>
        <tr bgcolor="#79ff76">
            <td align="center"><b>1</b></td>
            <td align="center"><a href="/link/Tokyo" title="Tokyo">Tokyo</a></td>
            <td>
                <a href="/img/Skyscrapers_of_Shinjuku_2009_January.jpg" class="image">
                    <img alt="Skyscrapers of Shinjuku 2009 January.jpg" src="/img/Skyscrapers_of_Shinjuku_2009_January.jpg"
                        width="200" height="200" />
                </a>
            </td>
            <td align="center"><a href="/link/Japan" title="Japan">Japan</a></td>
            <td align="center"><b>39,800,000</b></td>
        </tr>
        <tr bgcolor="#abd5f5">
            <td align="center">2</td>
            <td align="center"><a href="/link/Jakarta" title="Jakarta">Jakarta</a></td>
            <td>
                <a href="/img/Jakarta_Car_Free_Day.jpg" class="image">
                    <img alt="Jakarta Car Free Day.jpg" src="/img/Jakarta_Car_Free_Day.jpg" width="200" height="200" />
                </a>
            </td>
            <td align="center"><a href="/link/Indonesia" title="Indonesia">Indonesia</a></td>
            <td align="center">28,900,000</td>
        </tr>
    </tbody>
</table>

输出应为:

[
    {
      "name": "Tokyo",
      "country": "Japan",
      "population": 39800000,
      "url": "link/Tokyo"
    },
    {
      "name": "Jakarta",
      "country": "Indonesia",
      "population": 28900000,
      "url": "link/Jakarta"
    }
]

2 个答案:

答案 0 :(得分:0)

在Node中,您可以使用new DOMParser().parseFromString('<hi>Hello</hi>','text/html'),这将返回具有属性的可解析DOM树,您可以通过这些树来获取对象。

答案 1 :(得分:0)

考虑到表中数据的位置不会改变,您可以使用此代码。理想情况下,您应该具有一些ID或类来标识数据。如果您可以这样做,请相应地更改选择器。

https://repl.it/@rafaelcastrocouto/Peter-M-Question

heap_Extract()