我一直在尝试从 kafka 流式传输我的 json 事件,将其展平,然后使用 Spring Cloud 流将其推送回另一个主题。
输入:
{
"major": "Computer Science",
"books": [{
"title": "Learn C",
"author": "Prof C"
},
{
"title": "Learn Java",
"author": "Java Expert"
},{
"title": "Learn Python",
"author": "Python Master"
},]
}
压平工艺:
@ServiceActivator(inputChannel = Sink.INPUT, outputChannel = Source.OUTPUT)
public String(String event){
JSONArray result = new JSONArray();
JSONObject rawEvent = new JSONObject(event);
String major = rawEvent.get("major");
JSONArray books = rawEvent.get("books");
for (int i = 0; i < books.length; i++){
JSONObject book = books.get(i);
book.put("major", major);
result.put(book)
}
return result.toString();
}
仅产生:
[{"major":"Computer Science", "books.title":"Learn C", "books.author":"Prof C"},
{"major":"Computer Science", "books.title":"Learn Java", "books.author":"Java Expert"},
{"major":"Computer Science", "books.title":"Learn Python", "books.author":"Python Master"}]
我的问题是怎么让它变成这样
{"major":"Computer Science", "books.title":"Learn C", "books.author":"Prof C"}
{"major":"Computer Science", "books.title":"Learn Java", "books.author":"Java Expert"}
{"major":"Computer Science", "books.title":"Learn Python", "books.author":"Python Master"}
所以我可以像我所做的那样推回残缺的 JSONObject 而不是单个 JSONArray?
尽管如此,Spring Cloud Stream输出只是一个单独的事件,不适合我上面的案例,无法为Kafka生成3个事件。
谢谢你。
您生成的是一个有效的JSON数组。您试图生成的不是有效的JSON。但是只要你同意,你就可以简单地使用StringBuilder并把每个< i>book.toString()附加到它上面(而不是JSONArray)。那至少会产生你要找的东西。
此外,这确实不是一个与Spring Cloud Stream相关的问题,而是一个普通的Java/JSON问题,所以我认为StackOverflow上有更多特定的论坛可以为您提供更好的答案。
的确,我误解了。所以在本例中,我建议引入Spring集成和企业集成模式。你基本上对Splitter有一个明确的理由。有很多例子,但这里有一个简短的片段:@Splitter public List
我有一个常见的任务问题,我可以找到任何解决方案或帮助(也许我需要传递一些属性来工作?)我使用本地服务器1.3.0.M2并创建简单的流 在日志中,我得到了这个: 2017-09-28 12:31:00.644 信息 5156 --- [ -C-1] o.. a.k.c.c.internals.AbstractCoordinator : 成功加入第 1 代的组测试 2017-09-28 12:31:0
先来看一个表单递交的例子,我们有如下的表单内容,命名成文件login.gtpl(放入当前新建项目的目录里面) <html> <head> <title></title> </head> <body> <form action="/login" method="post"> 用户名:<input type="text" name="username"> 密码:<input type=
主要内容:重定向输出(Stdout和Stderr),抑制程序输出有三个键盘输入的通用“文件”,在屏幕上打印文本和在屏幕上打印错误。 标准输入文件(stdin)包含程序/脚本的输入。 标准输出(Standard Out)文件(stdout)被用来写输出以显示在屏幕上。 最后一种叫作的“标准错误”文件包含用于显示在屏幕上的任何错误消息。 这三个标准文件中的每一个(也称为标准流)分别使用数字,和进行引用。Stdin是文件,stdout是文件,stderr是文件。 重
问题内容: 我有以下形式的文本输入: 我试图让它接受多行输入。宽度和高度会使框变大,但用户可以输入所有想要的文本,但它只能填充一行。 如何使输入更像文本区域? 问题答案: 您需要使用文本区域进行多行处理。
我正在开发一个应用程序(控制台),其中包含一个while循环,我希望允许用户暂停和恢复。经过一些研究,似乎一个额外的线程负责等待用户输入是正确的解决方案。 我已经能够实现持续等待输入的额外线程,并且还有一个kill方法,它设置flag变量来停止线程while()循环。不幸的是,除非有输入,否则while循环不会结束,只有在输入线程的while环至少完成一次后,这个kill标志才会生效。由于主线程也
嗨,当一个新的实例/服务使用Spring cloud API注册到eureka时,我试图调用一个自定义方法。是否有任何处理程序/拦截程序可用于执行此操作?在完成注册后,它应该调用自定义方法,这里我试图将一个事件发布到队列中。