我有一个JSON数据传入和我用ExecuteScript与的Python代码提取该JSON数据的键和值,然后把它们放进属性。在这里我的代码:如何Nifi ExecuteScript返回属性没有前缀“u”代码python?
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返回字符串以前缀 'U'。
我的输入:
{ “PROJECT_1”:{ “DEVICE_CODE”: “V001”, “line_code”: “Anodiziing 12L”}}
和输出的内容属性:
{ u'device_code ':u'V001', u'line_code ':u'Anodiziing 12L'}
我还试图上的身体代码标头添加
#!/usr/bin/python3
。但没有改变。
我的问题是如何正确返回字符串,没有前缀'u'使用ExecuteScript Nifi?
更新: 我们需要将字典中的数据类型转换为字符串。 使用json.dumps(content)
而不是str(content)
,并且输出将没有前缀“u”。
你没有指定什么是错的。 – daggett
'json'字符串是Unicode的。 'u'''只是一个指示,表示您正在打印的字典包含Unicode字符串。如果您不想看到它们,请直接打印字符串。如果你正在运行Python 3,它不会使用'u''作为Unicode字符串,因为它们是默认字符串,但是你会看到字节串'b''。 –
@MarkTolonen,谢谢。将字典转换为字符串并直接放置后,输出没有前缀'u'作为我的目的。 –