首页 文章

如何Nifi ExecuteScript返回属性没有前缀'u'代码python?

提问于
浏览
0

我有一个json数据传入,我使用 ExecuteScriptPython 代码提取此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()

当我运行Job ExecuteScript 返回前缀为'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

在身体代码的 Headers 上 . 但没有变化 .

My question is how to return string correctly without prefix 'u' using ExecuteScript Nifi?

Updated: 我们需要将数据类型从字典转换为字符串 . 使用 json.dumps(content) 而不是 str(content) 并且输出将没有前缀'u' .

1 回答

  • 0

    JSON字符串是Unicode . u''只是指示您正在打印的字典包含Unicode字符串 . 如果您不想看到它们,请直接打印字符串 . 如果您运行的是Python 3,它不会对Unicode字符串使用u'',因为它们是默认值,但您会看到b''表示字节字符串 .

相关问题