首页 > 解决方案 > 如何在 vega 中访问嵌套的 json

问题描述

我在 kibana 中使用 vega。我尝试访问嵌套的 json 字段,但我无法访问该字段,谁能帮我解决这个问题。我附上了我的 vega json,索引名称是 pie

索引数据样本:

{“_index”:“pie”,“_type”:“flare”,“_id”:“2”,“_version”:1,“_score”:1,“_source”:{“id”:2,“父": 1, "数据" :{ "内存": 50 } } }

{
 "$schema": "https://vega.github.io/schema/vega/v3.json",
 "data": [
{
  "name": "table",
  "url": {

  "%context%": "true",

  "index": "pie*",

  "body": {

    "size": "10000"


  }
},

"format": { "property": "hits.hits" },

"transform": [
    {
      "type": "formula",
      "expr": "toNumber(datum[\"_source\"][\"data\"][\"memory\"])",
      "as": "memory"
    }
          ],
  "transform": [{"type": "pie", "field": "memory"}]
  }  ],

      "scales": [
      {
  "name": "r",
  "type": "sqrt",
      "domain": {"data": "table", "field": "memory"},
  "zero": true,
  "range": [20, 100]
  }
     ],

  "marks": [
{
  "type": "arc",
  "from": {"data": "table"},
  "encode": {
    "enter": {
      "x": {"field": {"group": "width"}, "mult": 0.5},
      "y": {"field": {"group": "height"}, "mult": 0.5},
      "startAngle": {"field": "startAngle"},
      "endAngle": {"field": "endAngle"},
      "innerRadius": {"value": 20},
      "outerRadius": {"scale": "r", "field": "memory"},
      "stroke": {"value": "#fff"}
    },
    "update": {
      "fill": {"value": "#ccc"}
    },
    "hover": {
      "fill": {"value": "skyblue"}
    }
  }
       },

    {
  "type": "text",
  "from": {"data": "table"},
  "encode": {
    "enter": {
      "x": {"field": {"group": "width"}, "mult": 0.5},
      "y": {"field": {"group": "height"}, "mult": 0.5},
      "radius": {"scale": "r", "field": "memory", "offset": 8},
      "theta": {"signal": "(datum.startAngle + datum.endAngle)/2"},
      "fill": {"value": "#000"},
      "align": {"value": "center"},
      "baseline": {"value": "middle"},
      "text": {"field": "memory"}
    }
  }
}
  ]   
    }

标签: kibanavega

解决方案


这个问题已在https://github.com/vega/vega/issues/1371中得到解答

你已经"format": { "property": "hits.hits" }在你的数据变量中定义了一个,我在你的数据中没有看到。即使是这样,在我的理解property中也不接受双重嵌套参数(例如。varx.vary),但为此我可能是错的。

接下来,您transform在单个data规范中有两个定义。

改变这个,给我: 在此处输入图像描述

{
  "$schema": "https://vega.github.io/schema/vega/v4.json",
  "data": [
    {
      "name": "table",
      "values": [
        {
          "_index": "pie",
          "_type": "flare",
          "_id": "2",
          "_version": 1,
          "_score": 1,
          "_source": {"id": 2, "parent": 1, "data": {"memory": 50}}
        }
      ],
      "transform": [
        {
          "type": "formula",
          "expr": "toNumber(datum[\"_source\"][\"data\"][\"memory\"])",
          "as": "memory"
        },
        {"type": "pie", "field": "memory"}
      ]
    }
  ],
  "scales": [
    {
      "name": "r",
      "type": "sqrt",
      "domain": {"data": "table", "field": "memory"},
      "zero": true,
      "range": [20, 100]
    }
  ],
  "marks": [
    {
      "type": "arc",
      "from": {"data": "table"},
      "encode": {
        "enter": {
          "x": {"field": {"group": "width"}, "mult": 0.5},
          "y": {"field": {"group": "height"}, "mult": 0.5},
          "startAngle": {"field": "startAngle"},
          "endAngle": {"field": "endAngle"},
          "innerRadius": {"value": 20},
          "outerRadius": {"scale": "r", "field": "memory"},
          "stroke": {"value": "#fff"}
        },
        "update": {"fill": {"value": "#ccc"}},
        "hover": {"fill": {"value": "skyblue"}}
      }
    },
    {
      "type": "text",
      "from": {"data": "table"},
      "encode": {
        "enter": {
          "x": {"field": {"group": "width"}, "mult": 0.5},
          "y": {"field": {"group": "height"}, "mult": 0.5},
          "radius": {"scale": "r", "field": "memory", "offset": 8},
          "theta": {"signal": "(datum.startAngle + datum.endAngle)/2"},
          "fill": {"value": "#000"},
          "align": {"value": "center"},
          "baseline": {"value": "middle"},
          "text": {"field": "memory"}
        }
      }
    }
  ]
}

推荐阅读