Charlie,

There is also a replaceEmpty() function that I think should simplify this:

INSERT INTO schema.table1
  (attribute_one, attribute_two, ...)
VALUES (
${someJson:jsonPath("$.Attribute1"):replaceEmpty("null")},
${someJson:jsonPath("$.Attribute2"):replaceEmpty("null")},
....
);

Thanks
-Mark

Sent from my iPhone

On Aug 14, 2017, at 7:30 PM, Andy LoPresto 
<[email protected]<mailto:[email protected]>> wrote:

Hi Charlie,

I may be misunderstanding your issue, but have you tried escapeJson() [1]? You 
can chain it onto a String expression, and it will escape a single quote to \’. 
You can also use unescapeJson() [2] if you need to provide an escaped quote and 
have it be interpreted by the next step.

I have a feeling that doesn’t quite answer your question, so maybe literal() 
[3] is what you are looking for. For example, I have an expression below which 
generates a random number that is either 0 or 1, and prints ‘zero’ for 0, but 
‘1’ for 1:

${random():mod(2):lt(1):ifElse('zero', ${literal(${literal(1):toString()})})}

I hope one of these helps. If not, please write back and hopefully someone who 
understands the question a bit better will be able to chime in.

[1] 
https://nifi.apache.org/docs/nifi-docs/html/expression-language-guide.html#escapejson
[2] 
https://nifi.apache.org/docs/nifi-docs/html/expression-language-guide.html#unescapejson
[3] 
https://nifi.apache.org/docs/nifi-docs/html/expression-language-guide.html#literal

Andy LoPresto
[email protected]<mailto:[email protected]>
[email protected]<mailto:[email protected]>
PGP Fingerprint: 70EC B3E5 98A6 5A3F D3C4  BACE 3C6E F65B 2F7D EF69

On Aug 14, 2017, at 6:57 PM, Charlie Frasure 
<[email protected]<mailto:[email protected]>> wrote:

Hi all,

We found that the ConvertJSONToSQL did not give us the control we wanted over 
the SQL being created from an existing JSON object, so we built our own query 
using the UpdateAttribute processor.  In doing so, we ran into a problem 
setting the SQL value from the JSON data because of quotations.  The ifElse 
function required a quote, as did the embedded path to the JSON value.  This 
left no way to wrap the SQL text with single quotes, and I have not found 
documentation of a character that would allow me to escape another set of 
quotes.

A basic working example is pasted below, but I had to ask if there is a better 
way.

Best,
Charlie


INSERT INTO schema.table1
  (attribute_one, attribute_two, ...)
VALUES (
${someJson:jsonPath("$.Attribute1"):isEmpty():ifElse("null", 
'~~${someJson:jsonPath("$.Attribute1")}~~'):replace("~~", "'")},
${someJson:jsonPath("$.Attribute2"):isEmpty():ifElse("null", 
'~~${someJson:jsonPath("$.Attribute2")}~~'):replace("~~", "'")},
....
);



Reply via email to