多个HTML表行上的Java循环
请注意,我不是Java专家,但是如果可能的话,我将非常感谢任何帮助和指导 我有一段Java代码,它读取文件的内容,并使用JSOUP将其解析为html。然后我需要将一个表转换为JSON。第一行成功转换,但以下所有行均未转换 我确信我遗漏了一些我正在仔细寻找的简单的东西,因此我将感谢任何指导/帮助 我的计划如下:多个HTML表行上的Java循环,java,html,json,jsoup,Java,Html,Json,Jsoup,请注意,我不是Java专家,但是如果可能的话,我将非常感谢任何帮助和指导 我有一段Java代码,它读取文件的内容,并使用JSOUP将其解析为html。然后我需要将一个表转换为JSON。第一行成功转换,但以下所有行均未转换 我确信我遗漏了一些我正在仔细寻找的简单的东西,因此我将感谢任何指导/帮助 我的计划如下: package html_to_json_parser; import java.io.BufferedReader; import java.io.FileInputStream; i
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());
}
}
将html\u打包成json\u解析器;
导入java.io.BufferedReader;
导入java.io.FileInputStream;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入org.json.JSONObject;
导入org.jsoup.jsoup;
导入org.jsoup.nodes.Document;
导入org.jsoup.nodes.Element;
导入org.jsoup.select.Elements;
公共类HTML_to_JSON_解析器{
公共静态void main(字符串[]args)引发IOException{
InputStream is=新文件InputStream(“skills_table.html”);
BufferedReader buf=新的BufferedReader(新的InputStreamReader(is));
String line=buf.readLine();
StringBuilder sb=新的StringBuilder();
while(行!=null){
sb.append(行)。append(“\n”);
line=buf.readLine();
}
字符串htmlFile=sb.toString();
Document doc=Jsoup.parse(htmlFile);
JSONObject JSONObject=新的JSONObject();
JSONObject jsonParentObject=新的JSONObject();
元素表=文件选择(“表”).first();
元素行=table.getElementsByTag(“tr”);
对于(int j=0,k=row.size();j
需要转换为JSON的HTML表:
技巧
初学者
中间的
先进的
阅读
✔
✔
✔
讲话
◯
✔
✔
书写
◯
◯
✔
相互作用
●
●
● ●
将“表”替换为“tbody”
及
如上所述的更改,这里您没有获得第jth tr元素并提取细节
顺便说一句,您还可以使用get()而不是eq(),这也会起作用
JSONObject jsonObject = new JSONObject();
嗯。。大错误。你应该把上面的开始放在循环里。因为对于每个for循环,它只是更新同一对象的参数,因此它会导致最后更新的细节
将“表”替换为“tbody”
及
如上所述的更改,这里您没有获得第jth tr元素并提取细节
顺便说一句,您还可以使用get()而不是eq(),这也会起作用
JSONObject jsonObject = new JSONObject();
嗯。。大错误。你应该把上面的开始放在循环里。因为对于每个for循环,它只是更新同一对象的参数,因此它会导致最后更新的细节 您在这里反复使用同一行:
Elements row = table.getElementsByTag("tr");
for (int j = 0, k = row.size(); j < k; j++) {
Elements cols = row.select("td");
您在此处反复使用同一行:
Elements row = table.getElementsByTag("tr");
for (int j = 0, k = row.size(); j < k; j++) {
Elements cols = row.select("td");
这将返回什么?对于五行,它将返回5。对于五行,它将返回什么?对于五行,它将返回5。S、 谢谢,我试过了。仍然只转换第一行:“Reading”。谢谢,它现在在每一行中循环,但只将最后一行的列(“td”)应用到每一行。我没有得到它。你能不能把示例输出放在如下位置:[{“技能”:“阅读”,“初学者”:●", "中级“:”●", "高级“:”● ●" }, {“技能”:“写作”,“初学者”:●,“中间”:●,“高级”:● ●},{“技能”:“口语”,“初学者”:●,“中间”:●,“高级”:● ●},{“技能”:“互动”,“初学者”:●,“中间”:●,“高级”:● ●“}]添加了解释。很高兴与您一起解决此问题。Hi@Vinujan.S,谢谢,尝试了此操作。仍然只转换第一行:“Reading”。谢谢,它现在在每一行循环,但只应用最后一行到每一行的列(“td”)。我不明白。请将示例outputOutput设置为:[{”skill:”阅读,“初学者”:●,“中间”:●,“高级”:● ●},{“技能”:“写作”,“初学者”:●,“中间”:●,“高级”:● ●},{“技能”:“口语”,“初学者”:●,“中间”:●,“高级”:● ●},{“技能”:“互动”,“初学者”:●,“中间”:●,“高级”:● ●“}]添加了解释。很高兴与您一起解决此问题。
Elements cols = row.get(j).select("td");