首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JSONiq获取JSON数据

使用JSONiq获取JSON数据
EN

Stack Overflow用户
提问于 2019-10-29 06:16:55
回答 1查看 55关注 0票数 2

假设这两个简单的JSON文件

代码语言:javascript
复制
      jsoniq version "1.0";

    let $tweets := 
    { 
    { "screen_name": "ifp_tuebingen"
    },
    { "screen_name": "ifp_tuebingen"
    },
    { "screen_name": "ifp_reutlingen"
    }
    }

    let $users := 
    {
    { "screen_name": "ifp_tuebingen"
    },
    { "screen_name": "ifp_reutlingen"
    }

}

我想要编写一个JSONiq查询,它根据每个用户的screen_name确定他有多少条tweet,本例的预期输出是

代码语言:javascript
复制
{ "2" : "ifp_tuebingen" }{ "1" : "ifp_reutlingen" }

我写了下面的代码

代码语言:javascript
复制
for $u in $users
let $counter := 0
for $t in $tweets
where $u.screen_name eq $t.screen_name
let $counter := $counter+1
return {$counter : $u.screen_name}

它将生成以下输出

代码语言:javascript
复制
{ "1" : "ifp_tuebingen" }{ "1" : "ifp_tuebingen" }{ "1" : "ifp_reutlingen" }
EN

回答 1

Stack Overflow用户

发布于 2019-10-29 15:00:27

JSONiq是一种声明性语言,这意味着它可以自动分组和计数,而不像命令式语言那样必须手动增加计数器:

代码语言:javascript
复制
let $tweets := (
  { "screen_name": "ifp_tuebingen" },
  { "screen_name": "ifp_tuebingen" },
  { "screen_name": "ifp_reutlingen" }
)
return
for $t in $tweets
group by $screen-name := $t.screen_name
let $count := count($t)
return { $count : $screen-name }

通常,更常见的做法是将计数作为值,并将屏幕名称作为结果中的键,即交换$count$u.screen_name

代码语言:javascript
复制
...
return { $screen-name : $count }

然后,JSONiq可以将这些结果重新组合到一个对象中,因为分组后的屏幕名称将是唯一的键:

代码语言:javascript
复制
...
return
{|
  for $t in $tweets
  group by $screen-name := $t.screen_name
  let $count := count($t)
  return { $screen-name : $count }
|}

请注意,在这种情况下不需要$users数据。只有当用户中有额外的元数据时,才需要它,在这种情况下,可以进行连接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58599096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档