我无法通过使用javascript从以下记录中成功获取user_id。我有一种感觉它是一个json字符串,但它根本不是我的json方式......
[{"columns":["id","user_id","task","priority"],"values":[[1,1,"Do some stuff",0]]}]
这是在使用sql.js之后来自以下内容的,该sql.js旨在从sqlite数据库中检索数据。:
$(function(){
var xhr = new XMLHttpRequest();
xhr.open('GET', 'db/sqlite.db', true);
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) {
var uInt8Array = new Uint8Array(this.response);
var db = new SQL.Database(uInt8Array);
var contents = db.exec("SELECT * FROM users");
//
var tasks = db.exec("SELECT * FROM tasks WHERE user_id=1");
var json = JSON.parse(tasks);
//console.log(json.columns[1].task);
//var json = JSON.parse(tasks);
document.getElementById('result').innerHTML = json.columns[0].task;
};
xhr.send();
});
答案 0 :(得分:0)
您的数据格式不正确。正确的JSON
对象应该以' {'和'}'分别。
它应该只是: { "列":[" ID"" USER_ID""任务""优先级&#34], "值":[ [1,1,"做一些事情",0] ] } 请注意,您提供的数据周围有一对额外的方括号。
如果您无法对数据结构进行更改,请注意它是一个数组,因此将其视为JS数组,而不是尝试将其解析为JSON,而不是它。
选项#1:如果你被迫使用JSON:
var json = JSON.parse(tasks[0]);
document.getElementById('result').innerHTML = json.columns[2]; // this will return "tasks"
// to fetch "Do some stuff" : json.values[json.columns.indexOf("tasks")];
选项#2:将其视为JS数组:
//var json = JSON.parse(tasks); Simply leave this line commented
document.getElementById('result').innerHTML = tasks[0].columns[0].task;
答案 1 :(得分:0)
呃,这看起来像是一种糟糕的返回数据的方式。但如果那就是你必须要做的事情:
var arr = [{"columns":["id","user_id","task","priority"],"values":[[1,1,"Do some stuff",0]]}];
var obj = arr[0];
console.log(obj);
var idx = false;
for( var i in obj.columns ){
if( obj.columns[i] == 'task' ){
idx = i;
break;
}
}
var task = obj.values[0][idx];
console.log(task);
[...]
表示一个数组。
{...}
表示一个对象。
https://jsfiddle.net/wjfy4pem/1/
在那里扔一堆console.log
来看看你的变量在不同的点上是什么。你可以稍微玩一下,然后想出一个更好的解决方案。