2014-11-21 51 views
2

MonetDB文檔說,MonetDB支持JSON,但我找不到任何示例。 當我嘗試執行此查詢在MonetDB客戶端:如何在MonetDB中使用JSON

json.filter({ "store": {  
    "bicycle": { 
     "color": "red", 
     "price": 19.95 
    }}},'$')  

我得到這個錯誤:語法錯誤,意想不到的IDENT在: 「JSON」

回答

1

https://www.monetdb.org/pipermail/users-list/2014-November/007700.html

在MonetDB,JSON是列類型,所以你首先需要定義與類型JSON,像一列的表:

CREATE TABLE a (js JSON);

一旦你插入JSON文件到表中,你可以做一個查詢:

SELECT json.filter(js, 'store') FROM a;

+1

謝謝,最重要的部分是:「從源頭上構建它」,因爲我使用的是win版本,不支持json。 – hjortron 2014-11-27 19:38:52

+0

我可以使用JSON類型作爲UDF輸入參數嗎?謝謝 – GBrian 2015-09-16 03:53:11

1

你有沒有試圖把單引號括起來的第一個參數?

以下適用於我。

select json.filter('{ "store": { 
    "bicycle": { 
     "color": "red", 
     "price": 19.95 
    }}}', '$'); 

結果是:

[{ "store": { 
"bicycle": { 
    "color": "red", 
    "price": 19.95 
}}}] 

我也試過這樣:

select json.filter('{ "store": { 
    "bicycle": { 
    "color": "red", 
    "price": 19.95 
    }}}', '$.store.bicycle.color'); 

結果是:

["red"] 

要返回顏色的字符串:

select json.text(json.filter('{ "store": { 
    "bicycle": { 
    "color": "red", 
    "price": 19.95 
    }}}', '$.store.bicycle.color')); 

...我得到:

red 

如果我嘗試:

select json.text(json.filter('{ "store": { 
    "bicycle": { 
    "color": "red", 
    "price": 19.95 
    }}}', '$.store.bicycle.price')); 

...我回來的價格爲一個字符串:

19.95 

但我也可以把它作爲一個數字:

select json.number(json.filter('{ "store": { 
     "bicycle": { 
     "color": "red", 
     "price": 19.95 
     }}}', '$.store.bicycle.price'));