2017-10-18 10 views
0

私はJSONデータは、着信があると私は、属性に入れて、このJSONデータのキーと値を抽出するためにのPythonコードでExecuteScriptを使用しています。ここに私のコード: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() 

私は 'U' プレフィックスと仕事ExecuteScript返す文字列を実行します。

マイ入力:

{ "てproject_1":{ "device_code": "V001"、 "line_code": "Anodiziing 12L"}}

との出力コンテンツ属性:

{ u'device_code ':u'V001'、 u'line_code ':u'Anodiziing 12L'}

Iはまた、本体コードのヘッダに

#!/usr/bin/python3 

を追加しようとしました。しかし、変化はありません。

私の質問は、ExecuteScript Nifiを使用して接頭辞 'u'を付けずに正しく文字列を返す方法です。

更新日: 辞書から文字列へのデータの変換が必要です。 str(content)の代わりにjson.dumps(content)を使用すると、出力に接頭辞 'u'が付きません。

+0

あなたは間違ったことを指定していません。 – daggett

+1

'json'文字列はUnicodeです。 'u'''は、印刷している辞書にUnicode文字列が含まれていることを示す指標に過ぎません。それらを見たくなければ、文字列を直接印刷してください。 Python 3を実行していた場合、Unicode文字列には 'u'''が使用されていません。これはデフォルトですが、バイト文字列には' b'''が表示されます。 –

+0

@ MarkTolonen、ありがとう。辞書を文字列に変換して直接入力した後、出力には目的の接頭辞「u」はありません。 –

答えて

0

JSON文字列はUnicodeです。 u ''は、印刷する辞書にUnicode文字列が含まれていることを示す指標に過ぎません。それらを見たくなければ、文字列を直接印刷してください。 Python 3を実行していた場合、Unicode文字列にはデフォルトであるため、u "'は使用されませんが、バイト文字列にはb"'が表示されます。

関連する問題