私は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'が付きません。
あなたは間違ったことを指定していません。 – daggett
'json'文字列はUnicodeです。 'u'''は、印刷している辞書にUnicode文字列が含まれていることを示す指標に過ぎません。それらを見たくなければ、文字列を直接印刷してください。 Python 3を実行していた場合、Unicode文字列には 'u'''が使用されていません。これはデフォルトですが、バイト文字列には' b'''が表示されます。 –
@ MarkTolonen、ありがとう。辞書を文字列に変換して直接入力した後、出力には目的の接頭辞「u」はありません。 –