在Sqlite中使用带有冒号(:)的键的json_extract的问题

时间:2016-07-16 15:13:34

标签: json sqlite

我有一个示例数据集,如下所示

id|accountid|attributes|created|type

1|10|{'base:instances': '{}', 'cont:contact': 'CLOSED', 'cont:contactchanged': '1468516440931', 'devconn:lastchange': '1462387904432', 'devconn:signal': '100', 'devconn:state': 'ONLINE', 'devpow:backupbatterycapable': 'false', 'devpow:battery': '66', 'devpow:linecapable': 'false', 'devpow:source': 'BATTERY', 'devpow:sourcechanged': '1462387904403', 'temp:temperature': '25.75'}|2016-05-04 18:51:44+0000|Test

2|20|{'base:instances': '{}', 'cont:contact': 'CLOSED', 'cont:contactchanged': '1468516440931', 'devconn:lastchange': '1462387904432', 'devconn:signal': '100', 'devconn:state': 'ONLINE', 'devpow:backupbatterycapable': 'false', 'devpow:battery': '66', 'devpow:linecapable': 'false', 'devpow:source': 'BATTERY', 'devpow:sourcechanged': '1462387904403', 'temp:temperature': '25.75'}|2016-05-04 18:51:44+0000|Prod

3|30|{'base:instances': '{}', 'cont:contact': 'CLOSED', 'cont:contactchanged': '1468516440931', 'devconn:lastchange': '1462387904432', 'devconn:signal': '100', 'devconn:state': 'ONLINE', 'devpow:backupbatterycapable': 'false', 'devpow:battery': '66', 'devpow:linecapable': 'false', 'devpow:source': 'BATTERY', 'devpow:sourcechanged': '1462387904403', 'temp:temperature': '25.75'}|2016-05-04 18:51:44+0000|Prod

4|40|{'base:instances': '{}', 'cont:contact': 'CLOSED', 'cont:contactchanged': '1468516440931', 'devconn:lastchange': '1462387904432', 'devconn:signal': '100', 'devconn:state': 'ONLINE', 'devpow:backupbatterycapable': 'false', 'devpow:battery': '66', 'devpow:linecapable': 'false', 'devpow:source': 'BATTERY', 'devpow:sourcechanged': '1462387904403', 'temp:temperature': '25.75'}|2016-05-04 18:51:44+0000|Test

我将它导入sqlite3 3.13进行一些分析(.mode csv,.headers on,.separator' |',。importmp.c.cv dev)

正如你所看到的那样,第二个字段是json格式的数据,密钥都有:在名称中,我认为是我的问题的一部分。

我想选择列类型匹配Test的所有行并打印devpow:来自属性列中json的电池值

我已经尝试了以下所有内容,但我无法将其付诸实施

select json_extract(dev.attributes, '$.devpower:battery') from dev where type=="Test";

select attributes.[devpower:battery] from dev where type=="Test";

select 'attributes.devpower:battery' from dev where type=="Test";

以上的相当多的渗透。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

devpow:battery是一个完全有效的对象标签,如果您实际使用的是有效的JSON(示例中的值不是),并且您拼写正确的标签(您没有),则它可以正常工作:< / p>

> SELECT attributes FROM dev;
{"devpow:battery": "66"}
> SELECT json_extract(dev.attributes, '$.devpow:battery') FROM dev WHERE ...;
66