【问题标题】:Convert SQLite to JSON将 SQLite 转换为 JSON
【发布时间】:2014-09-08 10:50:33
【问题描述】:

有没有办法将 sqlite 转换为 json?所有其他问题都在解析 json 并保存到 sqlite。我似乎找不到任何关于此的参考,请帮助我。

我在应用程序中有一个 sqlite db,我需要将它转换为 json,升级 db 版本,解析之前转换的 json 并添加另一个表。关于我应该如何做到这一点的任何建议?

提前致谢。

【问题讨论】:

  • 您可以从 Db 中获取 ArrayList,并使用 Gson 或 Jackson 等库将其转换为 JSON。
  • 我不确定我是否理解为什么这是第一次有人问这个问题,因为您不必这样做才能将 MySQL 数据库同步到 Android SQLite 数据库吗?

标签: android android-sqlite android-json


【解决方案1】:

参考Link

private JSONArray getResults()
{

String myPath = DB_PATH + DB_NAME;// Set path to your database 

String myTable = TABLE_NAME;//Set name of your table

//or you can use `context.getDatabasePath("my_db_test.db")`

SQLiteDatabase myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 

String searchQuery = "SELECT  * FROM " + myTable;
Cursor cursor = myDataBase.rawQuery(searchQuery, null );

JSONArray resultSet     = new JSONArray(); 

cursor.moveToFirst();
while (cursor.isAfterLast() == false) {

            int totalColumn = cursor.getColumnCount();
            JSONObject rowObject = new JSONObject();

            for( int i=0 ;  i< totalColumn ; i++ )
            {
                if( cursor.getColumnName(i) != null ) 
                { 
                    try 
                    { 
                        if( cursor.getString(i) != null )
                        {
                            Log.d("TAG_NAME", cursor.getString(i) );
                            rowObject.put(cursor.getColumnName(i) ,  cursor.getString(i) );
                        }
                        else
                        {
                            rowObject.put( cursor.getColumnName(i) ,  "" ); 
                        }
                    }
                    catch( Exception e )
                    {
                        Log.d("TAG_NAME", e.getMessage()  );
                    }
                } 
            } 
            resultSet.put(rowObject);
            cursor.moveToNext();
        } 
        cursor.close(); 
        Log.d("TAG_NAME", resultSet.toString() );
        return resultSet;  
}

【讨论】:

  • 这是来自文章Convert database cursor result to Json Array。复制粘贴的时候把参考链接贴出来就好了。
  • 好朋友。 - 只是一个修改。要获取您的数据库路径,请使用=> context.getDatabasePath("my_db_test.db") - 不要硬编码为 /data/data....
【解决方案2】:

如果您不想编写代码,可以快速简单地编写代码:

  • 为 SQLite 下载数据库浏览器:https://sqlitebrowser.org/(是的,它是免费的)
  • 打开 SQLite 数据库
  • 转到文件 > 导出 > 表到 JSON

请注意,由于某种原因,它不能正确转换 NULL 值。它将它转换为一个空字符串......此外,就我现在而言,它就像一个魅力。

【讨论】:

    【解决方案3】:

    sqlite,已经有 json1 扩展,你可以使用:

               //https://www.sqlite.org/json1.html
    
               //https://gist.github.com/akehrer/481a38477dd0518ec0086ac66e38e0e2
             var _sql = "SELECT json_group_array( json_object('id', id, 'name', name)    ) AS json_result FROM (SELECT * FROM ipfs ORDER BY id); ";
    

    sql.js 不支持 json1 扩展,

    我的工作示例将原始记录转换为 json

     function json1_extension(_records){
    
    
    
                                          var _json = [];
    
    
                                            var _columns = _records[0].columns
                                            var _values = _records[0].values
    
    
                                              for (var i = 0; i < _values.length; i++) {
                                                  //console.log(_values[i]);
                                                    var _row_json = {};
    
                                                    var _row = _values[i];
                                                    for (var k = 0; k < _row.length; k++) {
                                                        _row_json[_columns[k]] = _row[k]
    
    
                                                    }
    
                                                  //console.log('_row_json...',_row_json);
                                                 _json.push(_row_json)   
    
                                              }
    
    
    
    
    
    
    
                        return _json
                    }
    

    【讨论】:

      【解决方案4】:
      static JSONObject cursorToJson(Cursor c) {
          JSONObject retVal = new JSONObject();
          for(int i=0; i<c.getColumnCount(); i++) {
              String cName = c.getColumnName(i);
              try {
                  switch (c.getType(i)) {
                      case Cursor.FIELD_TYPE_INTEGER:
                          retVal.put(cName, c.getInt(i));
                          break;
                      case Cursor.FIELD_TYPE_FLOAT:
                          retVal.put(cName, c.getFloat(i));
                          break;
                      case Cursor.FIELD_TYPE_STRING:
                          retVal.put(cName, c.getString(i));
                          break;
                      case Cursor.FIELD_TYPE_BLOB:
                          retVal.put(cName, DataUtils.bytesToHexString(c.getBlob(i)));
                          break;
                  }
              }
              catch(Exception ex) {
                  Log.e(TAG, "Exception converting cursor column to json field: " + cName);
              }
          }
          return retVal;
      }
      

      【讨论】:

        【解决方案5】:

        要将 SQLite 转换为 JSON,您可以使用这个 python 工具:https://github.com/Austyns/sqlite-to-json-python

        如果您不想编码,也可以使用此在线工具https://data-converters.web.app/

        【讨论】:

          【解决方案6】:

          这个 npm 包可以完成这项工作。它可以轻松地将您的 sqlite 文件转换为 json。它还提供了操作输出的功能。

          https://www.npmjs.com/package/sqlite-json

          【讨论】:

            猜你喜欢
            • 2018-07-17
            • 2020-07-27
            • 1970-01-01
            • 2019-04-15
            • 2013-09-17
            • 1970-01-01
            • 2019-05-06
            • 2012-05-06
            • 1970-01-01
            相关资源
            最近更新 更多