Jolt-基于索引需要迭代一个列表并从索引中形成公共对象

Posted

技术标签:

【中文标题】Jolt-基于索引需要迭代一个列表并从索引中形成公共对象【英文标题】:Jolt- Based on the index need to iterate a list and form common object from the index 【发布时间】:2022-01-22 18:28:04 【问题描述】:

我需要迭代一个可以具有相同标签名称但具有不同索引(如 0、1、2)的列表。所以我需要迭代列表,取出公共索引并从该索引中取出名称和值标签并形成另一个列表。

请求:


  "characteristic": [
    
      "name": "BucketName",
      "value": "testName0",
      "@type": "bucketInfo",
      "arrayIndex": "0"
    ,
    
      "name": "BucketName",
      "value": "testName1",
      "@type": "bucketInfo",
      "arrayIndex": "1"
    ,
    
      "name": "BucketName",
      "value": "testName2",
      "@type": "bucketInfo",
      "arrayIndex": "2"
    ,
    
      "name": "BucketId",
      "value": "testId0",
      "@type": "bucketInfo",
      "arrayIndex": "0"
    ,
    
      "name": "BucketId",
      "value": "testId1",
      "@type": "bucketInfo",
      "arrayIndex": "1"
    ,
    
      "name": "BucketId",
      "value": "testId2",
      "@type": "bucketInfo",
      "arrayIndex": "2"
    
  ]

需要回复:


  "bucketList": [
    
      "BucketName": "testName0",
      "BucketId": "testId0"
    ,
    
      "BucketName": "testName1",
      "BucketId": "testId1"
    ,
    
      "BucketName": "testName2",
      "BucketId": "testId2"
    
  ]

我们如何根据来自 alist 的索引来实现这一点?

当有更多元素时,如何处理这种情况以跳过如果值未到来并仅添加即将到来的标签。 示例请求:


  "characteristic": [
    
      "name": "BucketName",
      "value": "testName0",
      "@type": "bucketInfo",
      "arrayIndex": "0"
    ,
    
      "name": "BucketId",
      "value": "testId0",
      "@type": "bucketInfo",
      "arrayIndex": "0"
    ,
    
      "name": "BucketType",
      "value": "testType1",
      "@type": "bucketInfo",
      "arrayIndex": "1"
    ,
    
      "name": "BucketId",
      "value": "testId1",
      "@type": "bucketInfo",
      "arrayIndex": "1"
    ,
    
      "name": "BucketName",
      "value": "testName2",
      "@type": "bucketInfo",
      "arrayIndex": "2"
    ,
    
      "name": "BucketId",
      "value": "testId2",
      "@type": "bucketInfo",
      "arrayIndex": "2"
    ,
    
      "name": "BucketId",
      "value": "testId3",
      "@type": "bucketInfo",
      "arrayIndex": "3"
    ,
    
      "name": "BucketName",
      "value": "testName3",
      "@type": "bucketInfo",
      "arrayIndex": "3"
    ,
    
      "name": "BucketData",
      "value": "testData3",
      "@type": "bucketInfo",
      "arrayIndex": "3"
    
  ]

预期响应:


    "bucketlist": [
        
            "BucketName": "testName0",
            "BucketId": "testId0"
        ,
        
            "BucketType": "testType1",
            "BucketId": "testId1"
        ,
        
            "BucketName": "testName2",
            "BucketId": "testId2"
        ,
        
            "BucketName": "testName3",
            "BucketId": "testId3",
            "BucketData": "testData3"
        
    ]

【问题讨论】:

【参考方案1】:

您可以应用两个连续的 shift 转换。以 "@(2,arrayIndex)" 为公因子,以便在第一次转换中组合常用标记数组下的元素,然后在第二次转换中根据需要显示它们,例如 p>

[
  
    "operation": "shift",
    "spec": 
      "characteristic": 
        "*": 
          "value": 
            "@(1,value)": "@(2,arrayIndex).@(2,name)"
          
        
      
    
  ,
  
    "operation": "shift",
    "spec": 
      "*": "bucketList[]"
    
  
]

【讨论】:

感谢您的快速帮助。但是当有更多这样的元素并且跳过一些元素时,不会添加新元素的值。总是 bucketId 和 bucketName 来自上述规范。 我在@Barbaros 上面编辑了问题 是的,需要动态@Barbaros 感谢@Barbaros 的快速解决方案 不客气@Chethan,好好学习

以上是关于Jolt-基于索引需要迭代一个列表并从索引中形成公共对象的主要内容,如果未能解决你的问题,请参考以下文章

pandas使用iloc函数基于dataframe数据行(row)的索引抽取单行或者多行数据其中多行索引需要嵌入在列表方括号[]中或使用:符号形成起始和终止范围索引

pandas读取csv数据index_col参数指定作为行索引的数据列索引列表形成复合(多层)行索引使用方括号[]基于列索引元组列表索引多列数据(index tuple list)

pandas读取csv数据index_col参数指定作为行索引的数据列索引列表形成复合(多层)行索引loc基于行层索引的最外层行索引索引行数据(outermost row index)

pandas读取csv数据index_col参数指定作为行索引的数据列索引列表形成复合(多层)行索引使用iloc基于行索引位置筛选dataframe的指定单个数据行

pandas读取csv数据index_col参数指定作为行索引的数据列索引列表形成复合(多层)行索引使用iloc基于行索引位置筛选dataframe的指定单个数据行

pandas使用read_csv函数读取csv数据index_col参数指定作为行索引的数据列索引列表形成复合(多层)行索引loc基于行层索引的最外层两个行索引索引行数据