Hm.... I might wrong. It wouldn't preserve other keys, so you have to evaluate other keys first, and split FNAMES and evaluate again. Sorry for the confusion.
2019년 12월 5일 (목) 오후 8:29, James McMahon <[email protected]>님이 작성: > Typo in my initial reply. I did use $.FNAMES. It drops all the other > key/value pairs in the output split result flowfiles. > I configured my SplitJSON like so: > JsonPathExpression $.FNAME*S* > Null Value Representation empty string > > If there are two values in the json array for that key FNAME*S*, I do get > two output flowfiles. But the only value present in the output is the value > from the split of the value list of FNAMES. All my other JSON keys and > values are not present. How do I tell SplitJSON to also retain all the > key/values I did not split on? > > On Thu, Dec 5, 2019 at 6:15 AM 노대호Daeho Ro <[email protected]> > wrote: > >> Path to be $.FNAMES, that will work I guess. >> >> 2019년 12월 5일 (목) 오후 8:10, James McMahon <[email protected]>님이 작성: >> >>> I should add that I also tried this for JsonPathExpression $.* >>> That result also wasn't what I require, because it gave me 14 different >>> flowfiles each with only one value - - the two that resulted from the FNAME >>> key, and one for each of the other 12 keys that had only one value. >>> My incoming JSON flowfile looks like this: >>> { >>> "KEY1":"value1", >>> "KEY2":"value2", >>> . >>> . >>> "FNAMES":["A","B"], >>> "KEY13":2 >>> } >>> >>> This is what I need as output: >>> { >>> "KEY1":"value1", >>> "KEY2":"value2", >>> . >>> . >>> "FNAMES":"A",, >>> "KEY13":2 >>> } >>> >>> and >>> >>> { >>> "KEY1":"value1", >>> "KEY2":"value2", >>> . >>> . >>> "FNAMES":"B", >>> "KEY13":2 >>> } >>> >>> How does one configure SplitJSON to accomplish that? >>> >>> On Thu, Dec 5, 2019 at 5:59 AM James McMahon <[email protected]> >>> wrote: >>> >>>> Daeho, I configured my SplitJSON like so: >>>> JsonPathExpression $.FNAME >>>> Null Value Representation empty string >>>> >>>> If there are two values in the json array for that key FNAME, I do get >>>> two output flowfiles. But the only value present in the output is the value >>>> from the split of the list. All my other JSON keys and values are not >>>> present. How do I tell SplitJSON to also retain all the key/values I did >>>> not split on? >>>> >>>> >>>> On Wed, Dec 4, 2019 at 9:26 PM 노대호Daeho Ro <[email protected]> >>>> wrote: >>>> >>>>> Of course. >>>>> >>>>> There is a processor, the name is SplitJson. It can split the JSON >>>>> text by defined key. For example, if there is a key name is 'fname' and >>>>> has >>>>> the value [a, b, c]. Once you split the JSON by that processor, the >>>>> resulted JSON will have the same key and values for others but 'fname' >>>>> will >>>>> be a for the first JSON , b for the second and so on. >>>>> >>>>> After that, do the EvaluateJsonPath for FNAME then it will have a and >>>>> b and c for each splited flowfiles. Thus, I recommend you to place the >>>>> SplitJson processor in front of the EvaluateJsonPath processor. >>>>> >>>>> 2019년 12월 5일 (목) 오전 10:58, James McMahon <[email protected]>님이 작성: >>>>> >>>>>> I don’t quite follow, Daeho. FNAME is an attribute that results >>>>>> *from* EvaluateJSonPath. Can you explain what you mean by splitting >>>>>> the Jason key before EvaluateJSonPath? >>>>>> Jim >>>>>> >>>>>> On Wed, Dec 4, 2019 at 7:45 PM 노대호Daeho Ro <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> I think you can split the json key for FNAME just before the >>>>>>> EvaluateJsonPath processor. Then, the fragment.* attributes will be >>>>>>> automatically created. >>>>>>> >>>>>>> 2019년 12월 5일 (목) 오전 8:24, Matt Burgess <[email protected]>님이 작성: >>>>>>> >>>>>>>> Jim, >>>>>>>> >>>>>>>> As of NiFi 1.8.0 [1], you should be able to do this with >>>>>>>> UpdateAttribute -> DuplicateFlowFile -> UpdateAttribute pattern, the >>>>>>>> first getting the number of values in the list via the count() EL >>>>>>>> function, the second using that (minus 1) to generate duplicates, >>>>>>>> each >>>>>>>> with a copy.index attribute set. That attribute can be used in >>>>>>>> another >>>>>>>> UpdateAttribute with getDelimitedField() EL function for each flow >>>>>>>> file to get its own value from FNAME. You may need to rename some of >>>>>>>> the attributes to fragment.* in order to use a merge processor, but >>>>>>>> I >>>>>>>> think all the necessary values are covered. Please let me know if >>>>>>>> this >>>>>>>> works for you or not, I added various improvements in order to >>>>>>>> support >>>>>>>> use cases like this, but if I missed something I can certainly add >>>>>>>> it. >>>>>>>> >>>>>>>> Regards, >>>>>>>> Matt >>>>>>>> >>>>>>>> [1] https://issues.apache.org/jira/browse/NIFI-5454 >>>>>>>> >>>>>>>> On Wed, Dec 4, 2019 at 4:54 PM James McMahon <[email protected]> >>>>>>>> wrote: >>>>>>>> > >>>>>>>> > I have a series of attributes that result from an >>>>>>>> EvaluateJSonPath. One of those attributes, FNAME, appears to be a list >>>>>>>> of >>>>>>>> values like so: [“A”,”B”,”C”]. I want to split my flow file into one >>>>>>>> for >>>>>>>> each list element. I need my results to have the original content, all >>>>>>>> the >>>>>>>> original attributes, and its value for the split result out of the >>>>>>>> list as >>>>>>>> a new attribute. I need to also know the split count, and be able to >>>>>>>> later >>>>>>>> merge my flow files after evaluating the results of the split. >>>>>>>> > How can I accomplish this? >>>>>>>> > Thanks very much in advance. >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> 노대호 *Daeho Ro */ Service Dev. >>>>>>> [email protected] / *M* +82 10-6366-2636 >>>>>>> *KR* 06167 서울시 서초구 강남대로 327, 13층 >>>>>>> <https://www.google.com/maps/search/%EC%84%9C%EC%9A%B8%EC%8B%9C+%EC%84%9C%EC%B4%88%EA%B5%AC+%EA%B0%95%EB%82%A8%EB%8C%80%EB%A1%9C+327,+13%EC%B8%B5?entry=gmail&source=g> >>>>>>> [image: Bespin Global] <https://bespinglobal.com/> >>>>>>> 국내 최다 클라우드 인증 자격을 보유한 MSP • 국내 유일 ISO 인증을 >>>>>>> 확보한 MSP • 가트너가 인정한 한중일 유일한 MSP >>>>>>> www.bespinglobal.com • ISO 27001:2013 • ISO 9001:2015 Certified >>>>>>> ------------------------------ >>>>>>> *Confidentiality Note:* This email may contain confidential and/or >>>>>>> private information. >>>>>>> If you received this email in error please delete and notify the >>>>>>> sender. >>>>>>> >>>>>> >>>>> >>>>> -- >>>>> 노대호 *Daeho Ro */ Service Dev. >>>>> [email protected] / *M* +82 10-6366-2636 >>>>> *KR* 06167 서울시 서초구 강남대로 327, 13층 >>>>> [image: Bespin Global] <https://bespinglobal.com/> >>>>> 국내 최다 클라우드 인증 자격을 보유한 MSP • 국내 유일 ISO 인증을 >>>>> 확보한 MSP • 가트너가 인정한 한중일 유일한 MSP >>>>> www.bespinglobal.com • ISO 27001:2013 • ISO 9001:2015 Certified >>>>> ------------------------------ >>>>> *Confidentiality Note:* This email may contain confidential and/or >>>>> private information. >>>>> If you received this email in error please delete and notify the >>>>> sender. >>>>> >>>> >> >> -- >> 노대호 *Daeho Ro */ Service Dev. >> [email protected] / *M* +82 10-6366-2636 >> *KR* 06167 서울시 서초구 강남대로 327, 13층 >> [image: Bespin Global] <https://bespinglobal.com/> >> 국내 최다 클라우드 인증 자격을 보유한 MSP • 국내 유일 ISO 인증을 >> 확보한 MSP • 가트너가 인정한 한중일 유일한 MSP >> www.bespinglobal.com • ISO 27001:2013 • ISO 9001:2015 Certified >> ------------------------------ >> *Confidentiality Note:* This email may contain confidential and/or >> private information. >> If you received this email in error please delete and notify the sender. >> > -- 노대호 *Daeho Ro */ Service Dev. [email protected] / *M* +82 10-6366-2636 *KR* 06167 서울시 서초구 강남대로 327, 13층 [image: Bespin Global] <https://bespinglobal.com/> 국내 최다 클라우드 인증 자격을 보유한 MSP • 국내 유일 ISO 인증을 확보한 MSP • 가트너가 인정한 한중일 유일한 MSP www.bespinglobal.com • ISO 27001:2013 • ISO 9001:2015 Certified ------------------------------ *Confidentiality Note:* This email may contain confidential and/or private information. If you received this email in error please delete and notify the sender.
