2017-08-22 6 views
0

適切なNifiプロセッサコンポーネントを使用して、文字列をjson に変換するための適切なコンポーネントを案内してください。Apache Nifi:Nifiプロセッサを使用して文字列(text/plain)をJSONタイプに変換するにはどうすればよいですか?

入力は、コンテンツタイプのテキストの文字列である/ EvaluateJsonPathの平野

{ productName : "tv", locationName: " chennai"} 

出力はまだ私が原因の入力として送ら間違ったコンテンツタイプにJSONパスに基づいてJSON性を評価することができませんと同じです。

{ 
productName : "tv", 
locationName: " chennai" 
} 

注:希望する変換を達成できないSplitText、AttirtubesToJsonプロセッサを試してみてください。

答えて

2

これは、入力データが有効なJSONではないためです。私はローカルでこの流れを再作成し、EvaluateJsonPathからの誤差が有効なJSONコンテンツを持っていなかった[flowfile] に凝縮

2017-08-22 10:20:21,079 ERROR [Timer-Driven Process Thread-5] o.a.n.p.standard.EvaluateJsonPath EvaluateJsonPath[id=0aec27af-015e-1000-fac5-4e0f455a10fe] FlowFile StandardFlowFileRecord[uuid=b903eeb0-8985-4517-910f-5e3bbbccb8dc,claim=StandardContentClaim [resourceClaim=StandardResourceClaim[id=1503421928125-1, container=default, section=1], offset=376, length=47],offset=0,name=91708717370829,size=47] did not have valid JSON content. 

です。プロセッサが厳密なバリデーターを使用しています。入力した入力が有効なJSONではありません。次にこのコンテンツを更新するために、テキスト操作や正規表現を使用する必要があります:

{"productName":"tv", "locationName":"chennai"} 

あなたがこの(ReplaceTextなどを介した)を達成したら、EvaluateJsonPathプロセッサが正常に動作します。

また、明確にするために、EvaluateJsonPathは、JSON値をフローファイル属性に抽出するJSONPath式を実行するように設計されています。任意のテキストをJSON形式に操作するようには設計されていません。

更新

JSONに任意のデータを変換する普遍的なプロセスはありません。

  • 検索値:(?<!\")(\w+)(?=[\s:])
  • 置換値:"$1"
  • 交換戦略:Regex Replace
  • 評価モード:あなたが提供する特定の入力を考えると、ReplaceTextのための以下の値が有効なJSONにこれを変換しますEntire text

受信データが他の方法で無効になった場合は、mod ifyこのプロセス。 JSONLintのようなものに興味があり、受信データを検証してフォーマットすることができます。

+0

Andy、答えをありがとう、はい私はそれが正しい形式ではないことを理解します。どのようにJSONに私の着信文字列を変換するのですか?それを処理するコンポーネントがありますか?または、ReplaceTextでどうすればいいですか?Replace Textのサンプルを投稿してください。 – Barath

+0

答えの更新を参照してください。 – Andy

+0

Andy、おかげさまで、私はこれを試してみます。私たちはnifiのための場所に複雑なプロセッサをたくさん持っていますが、ConvertStringToJsonのようなものは、正規表現のパターンなどを書くのではなく、簡単な処理をするのに間違いなく助けになります。 – Barath

関連する問題