【发布时间】:2021-01-01 09:18:48
【问题描述】:
我正在尝试以 HTML 格式显示一个表格,其中的数据存储在 Postgres 的 json 字段中。环顾四周,这听起来很简单,但与 javascript 前端不太一致,我找不到失败的根源。这是我所做的:
在 values_lists 表中创建了 json 字段“anything”:
ALTER TABLE dqm_app.values_lists ADD COLUMN anything json;
在该字段中插入了一些演示数据:
update dqm_app.values_lists set anything = '[
{"Indice": "1","Type": "ABBREV","Title": "ShortName","Text": "UNDEF"},
{"Indice": "2","Type": "ALIAS","Title": "AliasName","Text": "UNKOWN"},
{"Indice": "3","Type": "ALIAS","Title": "FemaleName","Text": "UNDEFINED"}]'
where id = 0;
创建了一个 javascript 函数并将其插入到 Rails 部分中以显示表格:
<div id="jsonTable-container" onload="CreateTable()">
<div id="jsonTable">
</div>
</div>
<script>
function CreateTable() {
var jsonData = <%= raw this_object.anything %>;
// Get table header
var columns = [];
for (var i = 0; i < jsonData.length; i++) {
for (var key in jsonData[i]) {
if (columns.indexOf(key) === -1) {
columns.push(key);
}
}
}
// Create the table
var table = document.createElement("table");
// Create columns headers
var tr = table.insertRow(-1);
for (var i = 0; i < columns.length; i++) {
var th = document.createElement("th");
th.innerHTML = columns[i];
tr.appendChild(th);
}
// Add lines to the table
for (var i = 0; i < jsonData.length; i++) {
tr = table.insertRow(-1);
for (var j = 0; j < columns.length; j++) {
var tableCell = tr.insertCell(-1);
tableCell.innerHTML = jsonData[i][columns[j]];
}
}
// Add the table to jsonTable-container
var tableContainer = document.getElementById("jsonTable");
tableContainer.innerHTML = "";
tableContainer.appendChild(table);
}
</script>
很遗憾,显示页面时,表格没有出现。
页面的源代码包含预期的数据,但格式不兼容 JSON:预期的关键标记替换为 =>
var jsonData = [{"Indice"=>"1", "Type"=>"ABBREV", "Title"=>"ShortName", "Text"=>"UNDEF"}, {"Indice"=>"2", "Type"=>"ALIAS", "Title"=>"AliasName", "Text"=>"UNKOWN"}, {"Indice"=>"3", "Type"=>"ALIAS", "Title"=>"FemaleName", "Text"=>"UNDEFINED"}];
因此控制台发出一条消息:
Uncaught SyntaxError: missing : after property id 0:688:29
如何从 Rails 对象中检索正确的 JSON 格式数据?
感谢您的帮助!
【问题讨论】:
-
你能像这样使用.to_json吗:(this_object.anything).to_json
-
是的,raw 和 .to_json 的组合返回一个 JSON 格式的表。谢谢有限循环!
-
太棒了!您介意我将其添加为答案吗?如果是,您会接受它作为正确答案吗? :)。我看到您自己添加了一个答案,但看起来您在其中使用了 .to_json。
-
请做!请继续关注,我可能会有另一个关于关闭主题的问题!
标签: javascript ruby-on-rails postgresql