首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组中的JSONiq计数重复

数组中的JSONiq计数重复
EN

Stack Overflow用户
提问于 2017-10-28 15:38:48
回答 1查看 391关注 0票数 1

我想用JSONiq计数重复的值。我有以下代码:

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

import module namespace fetch = "http://zorba.io/modules/fetch";

let $tweets := parse-json(fetch:content("/tweets.json"))
let $users := parse-json(fetch:content("/users.json"))

return 
    let $different_languages :=
        for $tweet in $tweets[]
        return {
            "name" : $tweet."metadata"."iso_language_code" 
        }


    return [$different_languages]

这将返回所有的语言,但是它为每种语言打开了一个新的对。看起来是这样的:

代码语言:javascript
复制
    [ { "name" : "de" }, 
      { "name" : "da" },
      { "name" : "da" },
      { "name" : "da" }]

我希望返回如下所示的JSON对象:

代码语言:javascript
复制
    [ { "count" : 1, "language" : "de" }, 
      { "count" : 3, "language" : "da" }]

我怎样才能做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-30 07:17:55

这可以通过一个组-by子句来实现。这类似于SQL组by,但具有更好的控制级别。

在下面的代码中,未装箱的$tweets数组中的四个对象根据它们的语言字段($tweet.metadata.iso_language_code)进行分组。在每个返回子句的计算中,分组变量$language将包含当前组的语言名称,而非分组变量$tweet将包含属于该组的tweet序列。对此序列调用count()将分别返回3和1。

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

import module namespace fetch = "http://zorba.io/modules/fetch";

let $tweets := parse-json(fetch:content("/tweets.json"))
let $users := parse-json(fetch:content("/users.json"))

return 
  for $tweet in $tweets[]
  group by $language := $tweet."metadata"."iso_language_code" 
  return { language: $language, count: count($tweet) }

另外,metadataiso_language_code上的引号也不需要。如果需要,还可以将结果打包到数组中,如下所示:

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

import module namespace fetch = "http://zorba.io/modules/fetch";

let $tweets := parse-json(fetch:content("/tweets.json"))
let $users := parse-json(fetch:content("/users.json"))

return [
  for $tweet in $tweets[]
  group by $language := $tweet.metadata.iso_language_code
  return { language: $language, count: count($tweet) }
]

返回子句中的表达式没有限制:$language$tweet和其他变量一样,可以用作任何JSONiq表达式的输入。例如,与其计算tweet,还可以将其嵌套在输出中,因为数据模型是树形的:

代码语言:javascript
复制
return { language: $language, count: [ $tweet ] }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46991454

复制
相关文章

相似问题

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