2017-10-18 1 views
0

는 내가 JSON 데이터를 수신하고 난 다음 특성에 넣어이 JSON 데이터의 키와 값 추출 파이썬 코드 ExecuteScript를 사용합니다. 여기에 내 코드 :Nifi ExecuteScript의 접두사 'u'code 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() 

내가 'U'접두어 작업 ExecuteScript 반환 문자열을 실행합니다.

내 입력 :

{ "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를 사용하여 문자열을 반환하는 방법입니까?

업데이트 : 데이터를 사전에서 문자열로 변환해야합니다. str(content) 대신 json.dumps(content)을 사용하면 출력에 접두어 'u'가 없습니다.

+0

무엇이 잘못되었는지 명시하지 않았습니다. – daggett

+1

'json' 문자열은 유니 코드입니다. 'u'''는 인쇄중인 사전에 유니 코드 문자열이 들어 있다는 것을 나타내는 지표입니다. 그들을보고 싶지 않으면 문자열을 직접 인쇄하십시오. 파이썬 3을 사용하고 있다면 유니 코드 문자열에'u'''를 사용하지 않습니다. 기본값이기 때문에 바이트 문자열에'b'''가 표시됩니다. –

+0

@ MarkTolonen, 감사합니다. 사전을 문자열로 변환하고 직접 입력하면 결과에 접두어 'u'가 없습니다. –

답변

0

JSON 문자열은 유니 코드입니다. u ''는 인쇄중인 사전에 유니 코드 문자열이 포함되어 있다는 표시기 일뿐입니다. 그들을보고 싶지 않으면 문자열을 직접 인쇄하십시오. 파이썬 3을 사용했다면 유니 코드 문자열에 대해 u ''를 사용하지 않습니다. 기본값이기 때문에 바이트 문자열에 대해서는 b ''가 표시됩니다.

관련 문제