2014-11-21 48 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'));