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)

ご覧のとおり、2 番目のフィールドは json 形式のデータで、すべてのキーの名前に : が含まれており、私の問題の一部だと思います。

列タイプが Test に一致するすべての行を選択して選択し、属性列の 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 に答える