多个HTML表行上的Java循环

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

请注意,我不是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());

    }

}
将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");