【问题标题】:SQLite to JSON in a simple JS function - parsing JSON一个简单的 JS 函数中的 SQLite 到 JSON - 解析 JSON
【发布时间】:2013-08-05 22:47:48
【问题描述】:

我想将 SQLite 数据库转换为 JSON 对象。在网上搜索后,我决定自己编写一个函数。我仍然是 JS/JSON/jQuery 的初学者,我认为以下代码应该可以工作:

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-Object 的最后一个条目之后会是那个逗号吗?我知道这不干净,但它应该仍然可以工作......?

【问题讨论】:

  • 将您的 JSON 粘贴到几个可用的在线 JSON 验证器之一中进行检查。

标签: json sqlite parsing


【解决方案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

代码:

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);

【讨论】:

  • 感谢您的建议!正如你告诉我的那样,我刚刚更改了我的 for 循环,最后一个逗号消失了,但它仍然不起作用,所以我猜有特殊字符(它是德语,所以会有几个 ä、ü、ö 和 ß)。我只是看了一下这个编码器,但老实说我不知道​​如何正确使用它。我已经将此文件复制到我的项目中,但我现在如何调用此操作?希望你能给我一点建议:)
  • 确保包含 json2.js 文件,然后在您发出警报之前执行jsonall = JSON.stringify(result.rows);。就这么简单
  • 我只是按照你说的做了,它返回了一个显示条目数的 JSON-Object {"length":33} 一个好的迹象是,解析的 JSON 会返回 [object Object],表明它有效:) 现在我只需要在字符串化方法中找出正确的术语......你有什么想法吗? :)
  • 我添加了你需要的代码,我认为它是正确的,但不能保证,毕竟我在没有测试的情况下这样做
  • 我不认为我犯了错误,但不能确定。看看这个例子jsfiddle.net/YegUe它与你正在做的非常相似,你应该能够将它应用到你的代码中。还要检查 javascript 控制台是否有错误,可能只是语法错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 2014-07-09
  • 2015-08-16
  • 1970-01-01
  • 2015-01-29
  • 1970-01-01
相关资源
最近更新 更多