【问题标题】:NIFI: get value from jsonNIFI:从 json 中获取值
【发布时间】:2017-10-22 02:28:56
【问题描述】:

我有一个 queryCassandra,它会生成像这样的 json:

{"results":[{"term":"term1"},{"term":"term2"}..]}

现在,我想从中获取所有由字符串格式的分隔符分隔的术语值;前任 : 学期1,学期2,学期3

所以我可以将此列表作为字符串参数传递给我已经设置的 java 主程序。

(我只需要转换,不需要java程序执行)

谢谢!

【问题讨论】:

    标签: minify apache-nifi


    【解决方案1】:

    作为一个变体,使用带有 groovy lang 的 ExecuteScript:

    import groovy.json.*
    
    //get input file
    def flowFile = session.get()
    if(!flowFile)return
    
    //parse json to map/array objects
    def content = session.read(flowFile).withStream{ stream-> return new JsonSlurper().parse( stream ) }
    
    //transform
    content = content.results.collect{ it.term }.join(',')
    
    //write new content
    flowFile = session.write(flowFile,{ stream->
        stream << content.getBytes("UTF-8")
    } as OutputStreamCallback)
    
    session.transfer(flowFile, REL_SUCCESS)
    

    【讨论】:

      【解决方案2】:

      您可以通过以下方式轻松获取这些值。

      GetFile-->EvaluateJsonPath-->PutFile
      

      在获取文件中,您必须指定 json 文件的位置。

      在 EvaluateJsonPath 中配置如下属性。,

      Destination:flowfile-attribute
      Return Type:json
      input.term1:$.results.[0].term           //To get term
      input.term2:$.results.[1].term
      

      在 Evaluate json 的结果中,您有两个具有这些值的属性。

      结果属性:

      input.term1: term1
      
      input.term2: term2
      

      以上代码对我有用,因此请随时投票/接受作为答案。

      【讨论】:

      • 嗨@uhb prab,非常感谢你的回答,但问题是我从cassandra收到的术语数量是未知的,所以我无法在EvaluateJsonPath中进行静态配置..
      • 是否有一个处理器,所以我可以从像这样的 json 数组中获取一组术语 ex:[term1,term2]:[{"term":"term1"},{"term: "term2"}]
      • 是的,您可以在 EvaluateJSON 路径之后使用 SplitJson 处理器并给出这样的 JSONPathExpression:$.results.[*] 用于拆分数组中的 json 值。在这里您可以进行两次拆分,然后使用 evaluatejsonPath 来获取来自两个拆分的值
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多