将SQLite转换为JSON

26

有没有一种方法可以将sqlite转换为json?所有其他问题都是解析json并保存到sqlite。我似乎找不到任何关于这个的参考,请帮助我。

我在应用程序中有一个sqlite数据库,需要将其转换为json,升级数据库版本,解析早期转换的json并添加另一个表。对此有什么建议吗?

提前感谢。


你可以从数据库中获取一个ArrayList,然后使用类似Gson或Jackson的库将其转换为JSON。 - Arash GM
我不确定为什么这是第一次有人问这个问题,因为难道不是必须这样做才能将MySQL数据库与Android SQLite数据库同步吗? - Lou Morda
目前为止最好的答案是 https://dev59.com/0lXTa4cB1Zd3GeqP4byc#67186486 - amka66
5个回答

22

如果您不想编写代码,可以使用以下简便方法:

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

请注意,由于某种原因,它无法正确转换 NULL 值。 它会将其转换为空字符串... 除此之外,就我所知,它的工作非常完美。


DB Brower无法将一个SQLite文件中的两个或更多表转换为单个JSON文件。相反,它会为每个表创建一个不同的JSON文件。(至少在版本3.12.2中是这样) - undefined

3

如果你已经安装了json1扩展,那么可以使用sqlite:

// 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
}

2
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;
}

1

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接