Java - 通过多个属性过滤JSON对象的数组

1 人不认可

我有一个存储在Cloudant的对象,像这样。

"attr1" : "value" , "Objects" : [{ "code" : "v1" , "allowNull" : "true" , "country" : "BE" "code" : "v2" , "allowNull" : "false" , "country" : "EG"

我想按代码/国家做一个过滤标准,所以输出将只是Objects列表中的一个对象。

有什么方法可以从Cloudant方面做到这一点吗?或者在Java端有一个有效的方法来完成?

java
json
cloudant
User
User
发布于 2019-02-25
1 个回答
xpqz
xpqz
发布于 2019-02-26
已采纳
0 人赞同

你可以通过Cloudant中的地图-还原视图来实现这一点。试试类似这样的方法。

function(doc) {
    if (doc && doc.Objects) {
        doc.Objects.forEach(function(obj) {
            emit([obj.code, obj.country], obj);

这将Objects列表中的所有项目排放到索引中,并有一个矢量值的键[code, country]

curl -s -XPOST -H "content-type:application/json" 'https://skruger.cloudant.com/demo/_design/query/_view/by_code_country?reduce=false' -d '{ "keys": [["v1","BE"]] }'
{"total_rows":2,"offset":0,"rows":[
    {"id":"1c593a931bcd7f0052ed8f9184810fd9","key":["v1","BE"],"value": 
        {"code":"v1","allowNull":"true","country":"BE"}}

你可以只通过代码查询,使用{}通配符标记,例如

curl -g 'https://skruger.cloudant.com/demo/_design/query/_view/by_code_country?reduce=false&startkey=["v1"]&endkey=["v1",{}]'