2013-08-05 74 views
1

我想将SQLite数据库转换为JSON对象。在搜索网页后,我决定自己写一个函数。我仍然在JS/JSON/jQuery的初学者,我想下面的代码应该工作:在一个简单的JS函数中JSON的SQLite - 解析JSON

function sqlite2json(){ 

    newJson = '{ "$resources": ['; 

    offlinedb = openDatabase (shortName, version, displayName, maxSize); 

    offlinedb.transaction(function(transaction) { 

     transaction.executeSql('SELECT * FROM Zaehlliste;', [], 
     function(transaction, result) { 

      if (result != null && result.rows != null) { 

       for (var k = 0; k < result.rows.length; k++) { 

        var row = result.rows.item(k); 

        newJson += '{ "Field0":"' + row.Field0 + '", "Field1":"' + row.Field1 + '", "Field2":"' + row.Field2 + '", "Field3":"' + row.Field3 + '", "Field4":"' + row.Field4 + '", "Field5":"' + row.Field5 + '"},' 

       } 

       jsonall = newJson + ']}'; 

       alert(jsonall); //shows me a correct JSON as string 

       jsonobjoff = $.parseJSON(jsonall); 

       for (i = 0; i < jsonobjoff.$resources.length; i++) { 

        $('#json').append("<li>" + jsonobjoff.$resources[i].Field0 + " " + jsonobjoff.$resources[i].Field1 + " " + jsonobjoff.$resources[i].Field2 + " " + jsonobjoff.$resources[i].Field3 + " " + jsonobjoff.$resources[i].Field4 + " " + jsonobjoff.$resources[i].Field5 + "</li>"); 

       } 

      }  

     },errorHandler); 

    },errorHandler, nullHandler); 

} 

这第二个for循环,并把内容与它的id =“JSON”这个元素只是为了控制,我终于得到了一个真正的JSON对象,但不幸的是没有列表出现。声明jsonall之后的警报显示了一个正确的JSON-Object作为字符串。我认为parseJSON不起作用,但我不知道为什么它不起作用。在JSON对象的最后一次输入之后,它可能是逗号吗?我知道这不是干净的,但它应该仍然有效...?

+0

将您的JSON粘贴到几个可用的在线JSON验证器中的一个来检查它。 –

回答

1

您生成的json不正确。 您在每个对象(在您的第一个for循环)后添加尾随逗号,但最后一个条目不应添加逗号,或者它不是有效的json。

改变这一点:

newJson += '{ "Field0":"' + row.Field0 + '", "Field1":"' + row.Field1 + '", "Field2":"' + row.Field2 + '", "Field3":"' + row.Field3 + '", "Field4":"' + row.Field4 + '", "Field5":"' + row.Field5 + '"},'; 

到:

if(k > 0) newJson += ','; 
newJson += '{ "Field0":"' + row.Field0 + '", "Field1":"' + row.Field1 + '", "Field2":"' + row.Field2 + '", "Field3":"' + row.Field3 + '", "Field4":"' + row.Field4 + '", "Field5":"' + row.Field5 + '"}'; 

,将工作(如果你没有在你的字符串中的特殊字符) 我会建议您手动使用JSON编码器,而不是生成字符串,它也会处理特殊字符,这将会遇到问题:https://github.com/douglascrockford/JSON-js/blob/master/json2.js

code f或者这样:

变化newJson = '{ "$resources": [';newJson = { $resources: [] };

,并在循环:

newJson.$resources[k] = { Field0: row.Field0, Field1: row.Field1, Field2: row.Field2, Field3: row.Field3, Field4: row.Field4, Field5: row.Field5 }; 

你可以只使用newJson.$resources[k] = row;在这里,但如果行有,你不想表现出更多的领域,他们将采取过于

创建JSON字符串:

jsonall = JSON.stringify(newJson); 
+0

感谢您的咨询! 我只是改变了我的for循环,你告诉我,这个最后一个逗号消失了,但它仍然没有工作,所以我想有特殊字符(这是德语,所以会有几个ä,ü,ö和ß)。 我只看了一下这个编码器,但老实说我不知道​​如何正确使用它。我已经将该文件复制到我的项目中,但我现在怎么称呼此操作?我希望你能给我一点建议:) – Fabi

+0

确保你包含了json2.js文件,然后在你的alert之前执行'jsonall = JSON.stringify(result.rows);'。它很简单 – x4rf41

+0

我只是做了你所说的,它给出了一个显示条目数的JSON对象 {“length”:33} 一个好兆头是,被解析的JSON返回[object Object],显示出它的工作原理:) 现在我只需要找出stringify-method中的正确术语......你有什么想法? :) – Fabi