1

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

4

1 回答 1

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);
于 2013-08-05T09:31:53.373 回答