如何在没有前缀 'u' 代码 python 的情况下使用 Nifi ExecuteScript return 属性?
How to Nifi ExecuteScript return attribute without prefix 'u' code python?
我有一个 json 数据传入,我使用 ExecuteScript 和 Python 代码提取此 json 数据的键和值,然后将它们放入属性中。这是我的代码:
import json
import java.io
from org.apache.commons.io import IOUtils
from java.nio.charset import StandardCharsets
from org.apache.nifi.processor.io import StreamCallback
class StreamCallback(StreamCallback):
def __init__(self):
pass
def process(self, inputStream, outputStream):
text = IOUtils.toString(inputStream, StandardCharsets.UTF_8)
data = json.loads(text)
for key in data:
first = key
break
content = data[first]
viewFlowFile = session.create()
viewFlowFile = session.putAllAttributes(viewFlowFile,{'project': str(first), 'content': str(content)})
session.transfer(viewFlowFile, REL_SUCCESS)
flowFile = session.get()
if flowFile != None:
flowFile = session.write(flowFile, StreamCallback())
session.transfer(flowFile, REL_FAILURE)
session.commit()
当我 运行 作业 ExecuteScript returns 字符串前缀 'u'.
我的输入:
{
"project_1": {
"device_code": "V001",
"line_code": "Anodiziing 12L"}}
和content的输出属性:
{
u'device_code': u'V001',
u'line_code': u'Anodiziing 12L'}
我也试过添加
#!/usr/bin/python3
关于 header 的 body 代码。但是没有变化。
我的问题是如何使用 ExecuteScript Nifi return 不带前缀 'u' 的正确字符串?
更新:
我们需要将数据类型从字典转换为字符串。
使用 json.dumps(content)
而不是 str(content)
并且输出将没有前缀 'u'.
JSON 字符串是 Unicode。 u'' 只是一个指示符,表明您正在打印的字典包含 Unicode 字符串。如果您不想看到它们,请直接打印字符串。如果您是 运行 Python 3,它不会将 u'' 用于 Unicode 字符串,因为它们是默认值,但您会看到 b'' 用于字节字符串。
我有一个 json 数据传入,我使用 ExecuteScript 和 Python 代码提取此 json 数据的键和值,然后将它们放入属性中。这是我的代码:
import json
import java.io
from org.apache.commons.io import IOUtils
from java.nio.charset import StandardCharsets
from org.apache.nifi.processor.io import StreamCallback
class StreamCallback(StreamCallback):
def __init__(self):
pass
def process(self, inputStream, outputStream):
text = IOUtils.toString(inputStream, StandardCharsets.UTF_8)
data = json.loads(text)
for key in data:
first = key
break
content = data[first]
viewFlowFile = session.create()
viewFlowFile = session.putAllAttributes(viewFlowFile,{'project': str(first), 'content': str(content)})
session.transfer(viewFlowFile, REL_SUCCESS)
flowFile = session.get()
if flowFile != None:
flowFile = session.write(flowFile, StreamCallback())
session.transfer(flowFile, REL_FAILURE)
session.commit()
当我 运行 作业 ExecuteScript returns 字符串前缀 'u'.
我的输入:
{ "project_1": { "device_code": "V001", "line_code": "Anodiziing 12L"}}
和content的输出属性:
{ u'device_code': u'V001', u'line_code': u'Anodiziing 12L'}
我也试过添加
#!/usr/bin/python3
关于 header 的 body 代码。但是没有变化。
我的问题是如何使用 ExecuteScript Nifi return 不带前缀 'u' 的正确字符串?
更新:
我们需要将数据类型从字典转换为字符串。
使用 json.dumps(content)
而不是 str(content)
并且输出将没有前缀 'u'.
JSON 字符串是 Unicode。 u'' 只是一个指示符,表明您正在打印的字典包含 Unicode 字符串。如果您不想看到它们,请直接打印字符串。如果您是 运行 Python 3,它不会将 u'' 用于 Unicode 字符串,因为它们是默认值,但您会看到 b'' 用于字节字符串。