在 Dataweave 2.0 中如何基于第二个数组元素搜索一个数组是基于 HTTP 查询参数构建的

问题描述

关于请求的小背景:

流程 API 旨在以过滤后的数据进行响应。 API 使用 HTTP GET 调用并在查询参数中传递需求,带有两组数据(1) 对象基本查询的数据 & (2) 带有过滤条件的数据以最终确定响应。 此 API 调用系统 API 以使用动态查询从 RDBMS 表中检索数据。

有时调用应用程序可能包含不适用于响应的过滤器,例如裤子上的“味道”或“有效期”。因此,响应应应用与请求参数相关的尽可能多的过滤条件。

由于 Mule API 规范在处理动态键方面的限制,过滤条件作为带有静态键 e.g.,{"condition": "Title: Harry P*"} 的字符串传递。

以下是示例:

API 规范-RAML,PropertyName:String 传递数据库fieldNamepropertyValue值在该数据库字段中"filter"一个数组对象,对象名称"condition" 并且值是一个有限制的字符串,即“pattern: .{3,}(?regex 的英文翻译:分别为 ":" 前最少 3 个字符和后最少 1 个字符)。

输入查询参数: propertyName=Title&propertyValue=Harry&filter={"condition": "description: Travel"}&filter={"condition": "MEDIA: Audio*"}&filter={"condition": "Type: Series"}&filter={"condition": "Quality: 4K"}

来自查询参数的过滤器对象被复制到一个数组中: Filterarray1: [ "{"condition": "Author: JK*"}","{"condition": "description: Travel"}","{"condition": "MEDIA: Audio*"}","{" condition": "类型:系列"}","{"condition": "质量:4K"}"],

无效/可忽略的过滤条件是:(i) "Author: JK*" & (ii) "Quality: 4K"

过滤条件的值可以接受通配搜索但不能是字符串的第一个字符,可以参考过滤“MEDIA:Audio*”

系统API响应对象有固定结构,它有字段:Type,Title,Description & Availables(Availables是一个Array对象,有两个字段Name & Media

系统 API 输出

[
    {
        "Type": "Series","Title": "Harry Potter and the Half-Blood Prince","Description": "Harry Potter and his encounter with Dark Lord","Availables": [
            {
                "Name": "HarryPotter_HBP.pdf","Media": "Paper Back"
            },{
                "Name": "HarryPotter_HBP.wmv","Media": "Audio Book"
            },{
                "Name": "HarryPotter_HBP.XMI","Media": "Movie"
            }
        ]
    },{
        "Type": "Series","Title": "Harry Potter and the Order of Phoenix","Description": "Harry Potter and his God Father","Availables": [
            {
                "Name": "HarryPotter_TOP.wmv","Media": "Audio Book"
            }
        ]

    },"Title": "Harry Potter and the Deathly Hallows","Description": "Harry Potter and his priorities","Availables": [
            {
                "Name": "HarryPotter_DH_1.mov","Media": "Movie"
            },{
                "Name": "HarryPotter_DH_2.mov","Media": "Movie"
            }
        ]

    },{
        "Type": "Kids","Title": "Harry Kitten and Tucker Mouse","Description": "Travel to Chester Cricket in Times Square","Availables": [
            {
                "Name": "HarryKitten&TuckerMouse.pdf","Media": "Paper Back"
            }
        ]
    },{
        "Type": "Novel","Title": "Harry,A History","Description": "Boy Wizard phenomenon and his fan boys","Availables": [
            {
                "Name": "HarryPotter&HisFans.wmv","Media": "Audio Book"
            }
        ]
    },"Title": "Harry Hole The Bat","Description": "Crime Inspector to observe a murder case..","Availables": [
            {
                "Name": "HarryHole_1.pdf",{
                "Name": "HarryHole_1.wmv",]

responSEObject 列表应该是从 System API Call 中过滤掉所有与主列表和子列表中的条件不匹配的数据后的最终数据,即,过滤条件应该应用于每个列表中的 Availables响应对象,例如,所有具有 {"Media": "Movie"} 的对象引用都应该从响应对象中删除

最终响应应如下所示:

[
    {
        "Type": "Series","Availables": [
            {
                "Name": "HarryPotter_HBP.wmv","Media": "Audio Book"
            }
        ],requestedPropertyName: "Title",requestedPropertyValue: "Harry",appliedFilters: "description: Travel|MEDIA: Audio*|Type: Series"
    },appliedFilters: "description: Travel|MEDIA: Audio*|Type: Series"

    },appliedFilters: "description: Travel|MEDIA: Audio*|Type: Series"
    }
]

我确信我们可以使用 Java 以更好、更快的方式实现它,但由于我对 Mulesoft 和 Dataweave 2.0 的了解有限,因此花费的时间比预期的要长。

请不要介意伸出援手,感谢所有帮助者。非常感谢这里的任何帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)