你会如何用javascript解析这个?

时间:2016-04-22 20:38:25

标签: javascript json

我无法通过使用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();
});

2 个答案:

答案 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来看看你的变量在不同的点上是什么。你可以稍微玩一下,然后想出一个更好的解决方案。