如何从SQLite数据库的JSON字段中提取指定值?
嘿,我来帮你搞定这个SQLite里提取JSON字段值的问题!
提取SQLite JSON字段中的特定值
首先得确认你的SQLite版本是否在3.37.0及以上——因为从这个版本开始,SQLite才引入了原生的JSON处理函数,这是最可靠的解决方案。你可以执行这条命令查看当前版本:
SELECT sqlite_version();
方法1:使用json_extract()函数(兼容3.37.0+)
这是最基础且兼容性较好的方式,语法逻辑很清晰:
-- 提取单个字段,比如lang的值 SELECT json_extract(data, '$.lang') AS lang_value FROM your_table_name;
这里的$.lang是JSON路径表达式:$代表整个JSON对象,.lang就是你要提取的键名。如果需要一次性提取多个值,直接在SELECT语句里追加即可:
SELECT json_extract(data, '$.lang') AS lang, json_extract(data, '$.gamecd') AS gamecd, json_extract(data, '$.userid') AS userid, json_extract(data, '$.region') AS region FROM your_table_name;
方法2:使用简化的->>操作符(兼容3.38.0+)
如果你的SQLite版本在3.38.0或更高,还可以用更简洁的语法,和MySQL的JSON提取用法类似,写起来更顺手:
-- 提取单个字段 SELECT data->>'$.lang' AS lang_value FROM your_table_name;
提取多个值的示例:
SELECT data->>'$.lang' AS lang, data->>'$.gamecd' AS gamecd, data->>'$.ingamesn' AS ingamesn FROM your_table_name;
一些重要的注意事项
- 确保
data字段里的内容是有效的JSON字符串,如果有格式错误(比如未闭合的引号、多余的逗号),这些JSON函数会返回NULL。你可以用下面的语句快速排查格式有问题的行:SELECT * FROM your_table_name WHERE json_valid(data) = 0; - 如果你的SQLite版本低于3.37.0,原生JSON函数就用不了了。这种情况下要么升级SQLite版本,要么只能用字符串处理函数(比如
substr()、instr())硬提取,但这种方法非常脆弱,JSON结构稍微变一下就会失效,极度不推荐。
内容的提问来源于stack exchange,提问作者jamefane
相关产品推荐
相关产品推荐

