2017-10-18 87 views
0

我有一个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”。

+0

你没有指定什么是错的。 – daggett

+1

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

+0

@MarkTolonen,谢谢。将字典转换为字符串并直接放置后,输出没有前缀'u'作为我的目的。 –

回答

0

JSON字符串是Unicode。 u“仅仅是你正在打印的字典包含Unicode字符串的一个指标。如果您不想看到它们,请直接打印字符串。如果你正在运行Python 3,它不会使用u''作为Unicode字符串,因为它们是默认字符串,但是对于字节字符串,您会看到b''。

相关问题