Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 从string-regex中删除空格_Json_Regex_Type Conversion_Apache Nifi_Jolt - Fatal编程技术网

Json 从string-regex中删除空格

Json 从string-regex中删除空格,json,regex,type-conversion,apache-nifi,jolt,Json,Regex,Type Conversion,Apache Nifi,Jolt,我有一个csv文件,其中的字符串字段包含由空格(千位分隔符)分隔的数字,例如“1025000”而不是“1025000” 我想删除那些空白,只针对带数字的字段,这样我就可以通过jolt转换将其转换为double,以便在输出时获得json文件,我正在使用regex表达式在ApacheNIFI和replaceText处理器上执行此操作 这是我的csv示例: Client1;Client2;Client3;price1;price2;price3 john smith;john2 smith2;john

我有一个csv文件,其中的字符串字段包含由空格(千位分隔符)分隔的数字,例如“1025000”而不是“1025000”

我想删除那些空白,只针对带数字的字段,这样我就可以通过jolt转换将其转换为double,以便在输出时获得json文件,我正在使用regex表达式在ApacheNIFI和replaceText处理器上执行此操作

这是我的csv示例:

Client1;Client2;Client3;price1;price2;price3
john smith;john2 smith2;john3 smith3;1 145;125;129 009
我使用的这个表达式不起作用:
(\s?=(\d{3},)+(?:\。\d{1,3}))”


提前感谢!

尽管您可以通过NiFi来实现这一点,但我建议您尝试更改源代码,并可能更正数字的格式和书写方式

无论如何,我马上想到的一种方法是使用
ExecuteScript
处理器来处理空白部分

假设您的CSV如下所示:

name,val
item1, 1 345 000
item2, 2 432
您可以使用
SplitRecord
处理器将CSV转换为JSON并将其拆分为1条记录。将此记录的输出馈送到
ExecuteScript

您可以使用以下
Groovy
代码来读取流文件内容并替换所有空白

import org.apache.commons.io.IOUtils
import java.nio.charset.StandardCharsets
import groovy.json.JsonSlurper

flowFile = session.get()
if(!flowFile)return

def jsonSlurper = new JsonSlurper()
def text = ''

flowFile = session.write(flowFile, {inputStream, outputStream ->
    input = IOUtils.toString(inputStream, StandardCharsets.UTF_8)
    inputJson = jsonSlurper.parseText(input)
    inputJson.val = inputJson.val.replaceAll("\\s", "")
    outputStream.write(inputJson.toString().getBytes(StandardCharsets.UTF_8))
} as StreamCallback)

session.transfer(flowFile, REL_SUCCESS)
根据用例的要求,将
ExecuteScript
success
关系连接到处理器。无论如何,所提供输入的输出如下所示:

{
  "name" : "item1",
  "val" : "1345000"
}

{
  "name" : "item2",
  "val" : "2432"
}

虽然您可以通过NiFi来实现这一点,但我建议您尝试更改源代码,并可能更正数字的格式和写入方式

无论如何,我马上想到的一种方法是使用
ExecuteScript
处理器来处理空白部分

假设您的CSV如下所示:

name,val
item1, 1 345 000
item2, 2 432
您可以使用
SplitRecord
处理器将CSV转换为JSON并将其拆分为1条记录。将此记录的输出馈送到
ExecuteScript

您可以使用以下
Groovy
代码来读取流文件内容并替换所有空白

import org.apache.commons.io.IOUtils
import java.nio.charset.StandardCharsets
import groovy.json.JsonSlurper

flowFile = session.get()
if(!flowFile)return

def jsonSlurper = new JsonSlurper()
def text = ''

flowFile = session.write(flowFile, {inputStream, outputStream ->
    input = IOUtils.toString(inputStream, StandardCharsets.UTF_8)
    inputJson = jsonSlurper.parseText(input)
    inputJson.val = inputJson.val.replaceAll("\\s", "")
    outputStream.write(inputJson.toString().getBytes(StandardCharsets.UTF_8))
} as StreamCallback)

session.transfer(flowFile, REL_SUCCESS)
根据用例的要求,将
ExecuteScript
success
关系连接到处理器。无论如何,所提供输入的输出如下所示:

{
  "name" : "item1",
  "val" : "1345000"
}

{
  "name" : "item2",
  "val" : "2432"
}

我不确定这里是否有一个简单的正则表达式。我的第一直觉是,你应该回到JSON的源代码并更改数字的格式。有什么原因不能这样做吗?在apache nifi中,我收到了转换为JSON的文本,我不能在JSON步骤之前进行转换。你不想这样做在JSON上使用正则表达式,句号。解析JSON,转换包含的数据(您可以使用正则表达式),将数据序列化回JSON。其他任何方法都是错误的。(除非您已经这样做了,否则请包含到目前为止的jolt转换。)我没有解释清楚,我在输入中有一个csv文件,我想应用正则表达式,用nifi的replacetext删除数字之间的空格。震动用于转换为double,它应用于我在输出中得到的json。你能显示你的csv文件的一部分吗?当我们不知道另一个是什么时,很难只匹配数字条目看起来像。我不确定这里是否有一个简单易懂的正则表达式。我的第一反应是,您应该返回JSON的源代码并更改数字的格式。有什么原因不能这样做吗?在apache nifi中,我收到了转换为JSON的文本,我无法在JSON步骤之前进行转换你根本不想在JSON上使用正则表达式,句号。解析JSON,转换包含的数据(你可以使用正则表达式),将数据序列化回JSON。其他任何方法都是错误的。(除非你已经这样做了,否则请包括到目前为止的jolt转换。)我没有解释清楚,我在输入中有一个csv文件,我想应用正则表达式,用nifi的replacetext删除数字之间的空格。震动用于转换为double,它应用于我在输出中得到的json。你能显示你的csv文件的一部分吗?当我们不知道另一个是什么时,很难只匹配数字条目看起来像。Sivaprasanna的建议很好。我会更进一步,提供一个
CSVReader
和一个允许您以CSV或JSON内联方式写入重新格式化的值,因此您不需要拆分和生成额外的流文件。您的建议很好,但我也有一些字段,我不想删除这些字段来自的空格。是否有一种方法可以使正则表达式仅适用于数字?如果您查看上面发布的Groovy代码,它只是从
val
字段中删除空格,而不是从所有字段中删除空格。如果您使用的字段非常少,您可以使用这种方法。Sivaprasanna的建议很好。我将更进一步nd提供了与
CSVReader
和a一起使用的选项,这将允许您以CSV或JSON内联方式写出重新格式化的值,因此您不需要拆分和生成额外的流文件。您的建议很好,但我也有一些字段,我不想删除其中的空格。是否有办法仅针对num修改regex表达式bers?如果您查看上面发布的Groovy代码,它只是从
val
字段中删除空格,而不是从所有字段中删除空格。如果您使用的字段很少,可以使用这种方法。