【发布时间】:2017-08-20 16:45:37
【问题描述】:
请注意,我不是 Java 专家,但如果可能的话,我将不胜感激任何帮助和指导。
我有一段 Java 代码可以读取文件的内容并使用 JSOUP 将其解析为 html。然后我需要将表格转换为 JSON。第一行转换成功,但以下行均未转换。
我确信我忽略了一些简单的东西,因此不胜感激任何指导/帮助。
下面是我的程序:
package html_to_json_parser;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.json.JSONObject;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class HTML_to_JSON_parser {
public static void main(String[] args) throws IOException {
InputStream is = new FileInputStream("skills_table.html");
BufferedReader buf = new BufferedReader(new InputStreamReader(is));
String line = buf.readLine();
StringBuilder sb = new StringBuilder();
while(line != null){
sb.append(line).append("\n");
line = buf.readLine();
}
String htmlFile = sb.toString();
Document doc = Jsoup.parse(htmlFile);
JSONObject jsonObject = new JSONObject();
JSONObject jsonParentObject = new JSONObject();
Element table = doc.select("table").first();
Elements row = table.getElementsByTag("tr");
for (int j = 0, k = row.size(); j < k; j++) {
Elements cols = row.select("td");
String skill = cols.get(0).text();
String beginner = cols.get(1).text();
String intermediate = cols.get(2).text();
String advanced = cols.get(3).text();
jsonObject.put("Beginner", beginner);
jsonObject.put("Intermediate", intermediate);
jsonObject.put("Advanced", advanced);
jsonParentObject.put(skill,jsonObject);
}
System.out.println(jsonParentObject.toString());
}
}
需要转成JSON的HTML表格:
<table>
<thead>
<tr>
<th>Skill</th>
<th>Beginner</th>
<th>Intermediate</th>
<th>Advanced</th>
</tr>
</thead>
<tbody>
<tr>
<td>Reading</td>
<td>✔</td>
<td>✔</td>
<td>✔</td>
</tr>
<tr>
<td>Speaking</td>
<td>◯</td>
<td>✔</td>
<td>✔</td>
</tr>
<tr>
<td>Writing</td>
<td>◯</td>
<td>◯</td>
<td>✔</td>
</tr>
<tr>
<td>Interacting</td>
<td>●</td>
<td>●</td>
<td>● ●</td>
</tr>
</tbody>
</table>
需要 JSON 输出:
[
{
"skill": "reading",
"beginner": "✔",
"intermediate": "✔",
"advanced": "✔"
},
{
"skill": "writing",
"beginner": "◯",
"intermediate": "✔",
"advanced": "✔"
},
{
"skill": "speaking",
"beginner": "◯",
"intermediate": "◯",
"advanced": "✔"
},
{
"skill": "interacting",
"beginner": "●",
"intermediate": "●",
"advanced": "● ●"
}
]
非常感谢您的指导和帮助。
【问题讨论】:
-
这会返回什么
row.size() -
嗨@SagarRohankar,它返回5,对于五行。