这是我的代码,我正在尝试从API中提取JSON数据。
数据正在被成功提取,但它不是以表格形式出现的。它是一个连续的水平字符串。
public class ServerDemo {
public static void main(String[] args) throws IOException {
System.out.println("server is started");
ServerSocket serverSocket= new ServerSocket(55286);
System.out.println("server is waiting");
Socket socket=serverSocket.accept();
System.out.println("Client connected");
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str=reader.readLine();
System.out.println("Client data: "+str);
socket.close();
serverSocket.close();
}
}
我在里面使用了3种不同类型的代码(其中2种标记在活动代码的上方和下方的注释中)。
他们都没有以表格格式显示数据。
这是Codepen。
答案 0 :(得分:1)
对您的代码进行一点修改。
请以下列方式使用
document.getElementById("demo").innerHTML = '<table><thead><tr><th>' +
myObj["dataset"]["column_names"][5] + '</th><th>' + myObj["dataset"]
["column_names"][6] + '</th></tr></thead>';
答案 1 :(得分:1)
问题在于,当您设置元素的innerHTML
时,浏览器会自动关闭所有未打开的标记,因为它必须解析您指定为完整HTML的内容。因此,您无法在单独的分配中连接开始标记,内容和结束标记。
解决方案是在您构建它时将所有HTML分配给字符串变量,然后在最后将其分配给.innerHTML
。这也更有效,因为它不必继续解析HTML。
if (this.readyState == 4 && this.status == 200) {
// Typical action to be performed when the document is ready:
var respoTxt = xhttp.responseText;
var myObj = JSON.parse(respoTxt);
var html = '<table><tr><thead>' +
myObj["dataset"]["column_names"][5] + '</thead><thead>' + myObj["dataset"]
["column_names"][6] + '</thead></tr>';
myObj["dataset"]["data"].forEach(function(p, i) {
html += '<tr>';
html += '<td>' + myObj["dataset"]
["data"][i][5] + '</td>';
html += '<td>' + myObj["dataset"]
["data"][i][6] + '</td>';
html += '</tr>';
});
html += '</table>';
document.getElementById('demo').innerHTML = html;
}
&#13;