2017-08-22 4 views
0

Bitte führen Sie die richtige Komponente für die Umwandlung von String in JSON mit geeigneten Nifi-Prozessor-Komponente.Apache Nifi: Wie konvertiert man Zeichenketten (Text/Plain) in JSON-Typ mit Nifi Prozessor?

Eingang ist eine Reihe von Inhaltstyp text/plain

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

Ausgabe von EvaluateJsonPath noch das gleiche ist wie ich nicht in der Lage bin json Eigenschaft zu bewerten, basierend auf json Weg durch falschen Inhaltstyp als Eingabe gesendet.

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

Hinweis: Versuchte SplitText, AttuTubesToJson Prozessoren können die gewünschte Konvertierung nicht erreichen.

Antwort

2

Dies liegt daran, dass die Eingabedaten nicht gültig JSON ist. Ich neu erstellt diese Strömung lokal und der Fehler von EvaluateJsonPath ist

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. 

die zu kondensiert [Flowfile] nicht gültig JSON Inhalt hatte. Der Prozessor verwendet einen strengen Validierer und die von Ihnen angegebene Eingabe ist kein gültiger JSON. Sie müssen die Textbearbeitung oder reguläre Ausdrücke verwenden, um diesen Inhalt zu folgenden aktualisieren:

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

Sobald Sie dies erreicht haben (über ReplaceText, etc.), die EvaluateJsonPath Prozessor richtig funktionieren.

Auch, um klar zu sein, EvaluateJsonPath ist entworfen, um JSONPath Ausdrücke ausführen, um JSON-Werte zu Flowfile-Attribute zu extrahieren. Es ist nicht dazu bestimmt, beliebigen Text in das JSON-Format zu manipulieren.

aktualisiert

Es gibt keinen universellen Prozess beliebige Daten zu JSON zu konvertieren. Gegeben Sie den spezifischen Eingang versehen, werden die folgenden Werte für ReplaceText wandeln diese in gültige JSON:

  • Suchen Wert: (?<!\")(\w+)(?=[\s:])
  • Ersatzwert: "$1"
  • Ersetzungsstrategie: Regex Replace
  • Bewertungsmodus: Entire text

Wenn Sie eingehende Daten erhalten, die auf andere Weise ungültig sind, müssen Sie mod ify dieser Prozess. Sie könnten an etwas wie JSONLint interessiert sein, um Ihre eingehenden Daten zu validieren und zu formatieren.

+0

Andy, Danke für die Antwort, ja, ich verstehe, es ist nicht korrekt formatieren Wie konvertiere ich meine eingehende Zeichenfolge zu JSON. Haben wir irgendeine Komponente, die sich darum kümmert? oder wie mache ich es in ReplaceText, könnten Sie bitte Probe von Text ersetzen, die groß wäre. – Barath

+0

Siehe das Update in der Antwort. – Andy

+0

Andy, Danke für deine Hilfe, ich werde das ausprobieren. Wir haben viele komplexe Prozessoren für nifi, aber etwas wie ConvertStringToJson wird uns definitiv helfen, einfache Prozesse zu machen, anstatt Regex-Muster zu schreiben usw. Trotzdem vielen Dank für den Rat. – Barath