如何在 Spring XD 中拆分传入的 Json 对象数组?
How to split incoming Json objects array in Spring XD?
假设我的传入数据是一个 json 对象或一个 json 对象数组。
我想拆分传入的 json 数据 iff 它是一个数组,以便我可以将它们插入到 MongoDB 集合中(为简单起见,我们现在只登录到控制台)。
定义流
xd:>stream create splittest --definition "http | json-to-tuple | splitter | log" --deploy
Post单个对象
xd:>http post --data "{\"dog\": \"chihuahua\"}"
21T09:05:59-0700 1.2.0.RELEASE INFO pool-44-thread-4 sink.splittest - {"dog":"chihuahua"}
这是预期的输出,因为输入是单个对象 - 无需拆分。
Post 对象数组
xd:>http post --data "[{\"dog\": \"poodle\"}, {\"dog\": \"chihuahua\"} , {\"dog\":\"poodle\"}]"
21T09:43:05-0700 1.2.0.RELEASE INFO pool-44-thread-11 sink.splittest - {}
在这种情况下,我希望看到每行打印三个单独的狗对象,但它打印了一个空对象。
我做错了什么?有人可以建议 could/should 已经完成了什么吗?
想出如何做到这一点。我不需要费心使用 json-to-tuple 处理器。
xd:>stream create splittest2 --definition "http | splitter --expression=#jsonPath(payload,'$.[*]') | log" --deploy
xd:>http post --data "[{\"dog\": \"poodle\"}, {\"dog\": \"chihuahua\"}, {\"dog\":\"poodle\"}]"
2015-10-21T10:52:31-0700 1.2.0.RELEASE INFO pool-83-thread-4 sink.splittest2 - {dog=poodle}
2015-10-21T10:52:31-0700 1.2.0.RELEASE INFO pool-83-thread-4 sink.splittest2 - {dog=chihuahua}
2015-10-21T10:52:31-0700 1.2.0.RELEASE INFO pool-83-thread-4 sink.splittest2 - {dog=poodle}
所以它适用于多个对象,但是,它并没有像我预期的那样处理单个对象。
xd:>http post --data "{\"dog\":\"chihuahua\"}"
2015-10-21T10:56:11-0700 1.2.0.RELEASE INFO pool-83-thread-10 sink.splittest2 - chihuahua
假设我的传入数据是一个 json 对象或一个 json 对象数组。 我想拆分传入的 json 数据 iff 它是一个数组,以便我可以将它们插入到 MongoDB 集合中(为简单起见,我们现在只登录到控制台)。
定义流
xd:>stream create splittest --definition "http | json-to-tuple | splitter | log" --deploy
Post单个对象
xd:>http post --data "{\"dog\": \"chihuahua\"}"
21T09:05:59-0700 1.2.0.RELEASE INFO pool-44-thread-4 sink.splittest - {"dog":"chihuahua"}
这是预期的输出,因为输入是单个对象 - 无需拆分。
Post 对象数组
xd:>http post --data "[{\"dog\": \"poodle\"}, {\"dog\": \"chihuahua\"} , {\"dog\":\"poodle\"}]"
21T09:43:05-0700 1.2.0.RELEASE INFO pool-44-thread-11 sink.splittest - {}
在这种情况下,我希望看到每行打印三个单独的狗对象,但它打印了一个空对象。
我做错了什么?有人可以建议 could/should 已经完成了什么吗?
想出如何做到这一点。我不需要费心使用 json-to-tuple 处理器。
xd:>stream create splittest2 --definition "http | splitter --expression=#jsonPath(payload,'$.[*]') | log" --deploy
xd:>http post --data "[{\"dog\": \"poodle\"}, {\"dog\": \"chihuahua\"}, {\"dog\":\"poodle\"}]"
2015-10-21T10:52:31-0700 1.2.0.RELEASE INFO pool-83-thread-4 sink.splittest2 - {dog=poodle}
2015-10-21T10:52:31-0700 1.2.0.RELEASE INFO pool-83-thread-4 sink.splittest2 - {dog=chihuahua}
2015-10-21T10:52:31-0700 1.2.0.RELEASE INFO pool-83-thread-4 sink.splittest2 - {dog=poodle}
所以它适用于多个对象,但是,它并没有像我预期的那样处理单个对象。
xd:>http post --data "{\"dog\":\"chihuahua\"}"
2015-10-21T10:56:11-0700 1.2.0.RELEASE INFO pool-83-thread-10 sink.splittest2 - chihuahua