javascript - 将 HTML 字符串转换为 JSON 对象
问题描述
我正在使用我的一个旧的硬编码网站,并试图从 HTML 中剥离数据并将其放入一个新的 JSON 对象中。
目前我收到一个项目表(为简单起见而减少)作为一个巨大的字符串,几乎有 1000 行。任何 HTML 上都没有类或属性
let tableString = `
<tr>
<td>01/01/1999</td>
<td>Item 1</td>
<td>55</td>
</tr>
<tr>
<td>01/01/2000</td>
<td>Item 2</td>
<td>35</td>
</tr>
`
我正在努力实现以下目标
[{
date: '01/01/1999',
name: 'Item 1',
cost: 55
},
{
date: '01/01/2000',
name: 'Item 2',
cost: 35
}]
我已经实现的当前代码
let newData = []
let stringArray = results.split('</tr>')
stringArray.map(item => {
let stripped = item.replace('/n', '')
stripped = stripped.replace('<tr>', '')
let items = stripped.split('<td>')
let newItem = {
data: items[0],
name: items[1],
cost: items[2]
}
return newData.push(newItem)
})
我拿着一根巨大的绳子,在每件物品的末尾把它分开。这可行,但是它将实际标签从项目本身中剥离出来,并给我留下一个额外的(我的数组中的空字符串项目)。
接下来,我将映射数组中的每个字符串,并进一步尝试去除所有换行符以及为了获得表格单元格数组,然后理论上我可以构建我的对象(在我去除表格单元格之后)。
但是,当我这样做时,这replace
似乎不起作用,我的思考过程是否正确,我应该如何看待正则表达式模式以更好地针对这一点?
解决方案
您可以将 trs 粘贴到表格中并从表格元素中处理数据。
let tableString = `
<tr>
<td>01/01/1999</td>
<td>Item 1</td>
<td>55</td>
</tr>
<tr>
<td>01/01/2000</td>
<td>Item 2</td>
<td>35</td>
</tr>
`;
const table = document.createElement('table');
table.innerHTML = tableString;
console.log(
[...table.querySelectorAll('tr')].map(tr => {
return {
date: tr.children[0].innerText,
name: tr.children[1].innerText,
cost: tr.children[2].innerText
};
})
);
推荐阅读
- javascript - 如何将int值设置为角度字符串
- r - 检索R中列的最大和第二个最大值的行名
- javascript - 如何在 SQL 查询 Oracle APEX 中的数据之前删除表
- python - 无法启动 Celery Worker (Kombu.asynchronous.timer)
- php - PHP Mustache - 多个部分
- apache - Apache2 sigterm 在 debian 上崩溃
- python - Redis 幂等地设置键上的 ttl
- angular - Angular 5 和 NodeJS 的 HTTP 获取请求
- javascript - 在javascript中使用jsonpath插入JSON对象?
- javascript - React Native Animated PanResponder 在第二个输入上反转