如何在nifi中使用evaluatejsonpath处理器拆分json

kkih6yb8  于 2021-05-31  发布在  Hadoop
关注(0)|答案(2)|浏览(951)

我想在nifi中分割和传输json数据,这里是我的json结构,如下所示;我想把json按id1、id2数组拆分,把json传输到各自的处理器组,比如处理器组a、b。我尝试使用evaluate json路径$.id1,$.id2,但没有得到确切的解决方案。你能帮我解决这个问题吗;

{
    "id1": [{
        "u_name": "aa"
    }, {
        "addr": "bb"
    }],
    "id2": [{
        "u_name": "aa"
    }, {
        "addr": "bb"
    }]
}
uqdfh47h

uqdfh47h1#

下面是如何使用evaluatejsonpath获得所需的值:
@瓦伦拉提南 通过evaluatejsonpath访问数组对象中的json可能会非常混乱。  我还注意到json的结构有点让人困惑,因为两者的值都相同。 我已经为cc和dd的测试调整了id2,以便我可以区分id1和id2的值。
您需要的解决方案是(请参阅模板以了解确切的字符串值):

注意,我们对每个json对象($.object)使用普通树,然后访问数组(0,1),然后访问数组的对象。  另外请注意,可以使用或不使用命令访问json对象数组。在[。
参考文献:https://community.cloudera.com/t5/support-questions/how-to-extract-fields-in-flow-file-which-are-surrounded-by/m-p/208635
在我的github上测试您的问题时,您也可以找到我的模板:https://github.com/steven-dfheinz/nifi-templates/blob/master/nifi_evaluatejsonpath_demo.xml

piztneat

piztneat2#

你要找的处理器是 SplitJSON . 配置如下:

然后,您将收到两个流文件:

第一个将包含 id1 :

[{
        "u_name": "aa"
    }, {
        "addr": "bb"
    }]

第二个将包含 id2 :

[{
        "u_name": "aa"
    }, {
        "addr": "bb"
    }]

相关问题