【发布时间】:2018-09-12 09:44:23
【问题描述】:
我有这一行 JSON 文本:
{"schemaText":{"fields":[{"name":"AX_SND_TYPE","type":"string"},{"name":"BWORK","type":"int"}],"name":"XXXSchema","type":"record"},"description":"Autogenerated by NiFi"}
可以看出有一个名为“schemaText”的属性包含一个对象,我想将其转换为字符串,所以我需要做的“唯一”事情是在属性的开头和结尾添加引号并转义里面的引号。
使用下面的正则表达式(不是我的正则表达式知识真的很低),我可以做第一步:
({"schemaText":)(\{"fields":\[.*)(,"description.*)
使用替换
$1"$2"$3
给出结果:
{"schemaText":"{"fields":[{"name":"AX_SND_TYPE","type":"string"},{"name":"BWORK","type":"int"}],"name":"XXXSchema","type":"record"}","description":"Autogenerated by NiFi"}
但仍然要转义引号才能得到这个:
{"schemaText":"{\"fields\":[{\"name\":\"AX_SND_TYPE\",\"type\":\"string\"},{\"name\":\"BWORK\",\"type\":\"int\"}],"name":"XXXSchema","type":"record"}","description":"Autogenerated by NiFi"}
即具有有效的 JSON 格式。
问题是:有没有办法在同一个正则表达式中转义 $2 捕获组内的引号?
提前致谢。
【问题讨论】:
-
你必须为此使用正则表达式吗?您可以不使用 JSON 解析器按您的意愿对不同部分进行字符串化/对象化吗?
-
是的,只有正则表达式,目前我有一个代码方法,但关键是如果可能的话,只能使用正则表达式来解决它。
-
Regex 不会为您转义字符串。您需要替换反斜杠
-
@cricket-007 不确定您是否阅读并理解您的观点,必须转义的是属性 schemaText 的引号,以便能够将其发布到架构注册表,转义所有引号正则表达式在这个例子中很简单:regex101.com/r/QNtqYy/1
标签: json regex avro confluent-schema-registry