2013-08-05 75 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