Java loop on multiple HTML table rows -
please note no java expert, appreciate , guidance possible.
i have piece of java code reads contents of files , parses html using jsoup. need convert table json. first row converts successfully, none of following rows getting converted.
i sure simple missing on looking, appreciate guidance / assistance.
my program below:
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 = 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"); (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 table needs converted json:
<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>
require json output:
[ { "skill": "reading", "beginner": "✔", "intermediate": "✔", "advanced": "✔" }, { "skill": "writing", "beginner": "◯", "intermediate": "✔", "advanced": "✔" }, { "skill": "speaking", "beginner": "◯", "intermediate": "◯", "advanced": "✔" }, { "skill": "interacting", "beginner": "●", "intermediate": "●", "advanced": "● ●" } ]
your guidance , assistance appreciated.
element table = doc.select("tbody").first();
replace "tbody" instead of "table"
and
elements cols = row.eq (j).select("td");
change above, here missed jth tr element , extract details.
btw can use () instead of eq () work
jsonobject jsonobject = new jsonobject();
ew.. big mistake. shoud put above initiation inside loop. because every loop updating same object's parameters results in lastly updated details.
Comments
Post a Comment