将Json对象数组拆分为单个对象

时间:2015-10-21 23:24:46

标签: arrays json spring-xd

让我们说我的SpringXD源数据包含一个json对象(狗)数组,我想要计算每个数组元素(dog)所具有的字段值(dogType)。

为此,首先我定义输入流并使用拆分器来分解数组。

  1. 定义拆分器

    xd:> stream create dogstream --definition" http | splitter --expression = #jsonPath(payload,' $。[*]')|登录" --deploy

    xd:&gt; http post --data&#34; [{\&#34; dog \&#34;:\&#34; poodle \&#34;},{\&#34; dog \&#34;:\&#34; chihuahua \&#34;},{\&#34; dog \&#34;:\&#34; poodle \&#34;}]&#34; < / p>

  2. 2015-10-21T10:52:31-0700 1.2.0.RELEASE INFO sink.dogstream- {dog = poodle}

    2015-10-21T10:52:31-0700 1.2.0.RELEASE INFO sink.dogstream- {dog = chihuahua}

    2015-10-21T10:52:31-0700 1.2.0.RELEASE INFO sink.dogstream- {dog = poodle}

    所以分离器工作。

    1. 接下来,在上面的流

      中添加一个字段值计数器

      stream create --name dogCounter --definition&#34; tap:stream:dogstream&gt; field-value-counter --fieldName = dog&#34; --deploy

    2. 现在,问题是 如果我发布更多数据(狗),SpringXD应该创建字段值计数器(我猜是懒惰创建)并为每种狗类型增加狗计数器,但我不会看到任何发生的事情。 其余端点(http://localhost:9393/metrics/field-value-counters/)不显示我创建的计数器。

      有人能想到这个原因吗? SpringXD是否支持此功能?我认为这是一个合法的用例。

1 个答案:

答案 0 :(得分:0)

两个问题:

<强> 1。错误的类型

根据文档记录,字段值计数器仅支持POJOTupleJSON StringjsonPath发出LinkedHashMap;所以我们需要将它转换回JSON ......

xd:>stream create dogstream --definition "http | splitter --expression=#jsonPath(payload,'$.[*]') --outputType=application/json | log" --deploy

在这里,我使用了outputType属性。

<强> 2。错误的分析点

您正在点击流的错误部分;默认情况下,点按应用于第一个|;你需要在拆分器后点击......

xd:>stream create --name dogCounter --definition "tap:stream:dogstream.splitter > field-value-counter --fieldName=dog" --deploy