0

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

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 '|',.import file.csv dev)

如您所见,第二个字段是 json 格式的数据,键都具有:在名称中,我认为这是我的问题的一部分。

我想选择列类型匹配测试的所有行,并从属性列中的 json 打印出 devpow:battery 值

我已经尝试了以下所有方法,但无法正常工作

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";

以及以上的不少渗透。任何帮助是极大的赞赏。

4

1 回答 1

0

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

> SELECT attributes FROM dev;
{"devpow:battery": "66"}
> SELECT json_extract(dev.attributes, '$.devpow:battery') FROM dev WHERE ...;
66
于 2016-07-16T21:39:54.823 回答