将字符串数组映射到单个数组

Map string array into individual arrays

我正在尝试为批量 API 消息正文操纵我的有效负载,同时更新多个图像。例如这里我有两张图片:

[
  {
    "entry": {
      "media_type": "image",
      "position": [
        "1",
        "2"
      ],
      "disabled": false,
      "types": {
        "image",
      "small_image",
      "thumbnail"
      },
      "content": {
        "base64_encoded_data": [
          "/9j/4ReLRXhpZgAATU0AKgAAAAgA....",
         "/9j/4ReLRXhpZgAATU0AKgAAAAgA...."],
"type": "image/jpeg",
        "name": [
          "228186_1.jpg",
          "228187_2.jpg"
        ]
      },
      "sku": [
        "228186",
        "228187"
     ]
}
}
]

但我需要将它们显示为彼此下方的两个单独条目...如何将其拆分为单独的条目,以便对于位置和 sku 等它只显示一个条目?最终我会想用它来列出彼此下面的几个图像的数据来更新 via bulk API.

这是我想要的输出

[
{
"entry": {
"media_type": "image",
"disabled": false,
"position": 1,
"types": [
"image",
"small_image",
"thumbnail"
],
"content": {
"base64EncodedData":  ["/9j/4ReLRXhpZgAATU0AKgAAAAgA....],
"type": "image/png",
"name": "228186_1.jpg"
}
},
"sku": "228186"
},
{
"entry": {
"media_type": "image",
"disabled": false,
"position": 2,
"types": [
"image",
"small_image",
"thumbnail"
],
"content": {
"base64EncodedData":  ["/9j/4ReLRXhpZgAATU0AKgAAAAgA....],
"type": "image/jpeg,
"name": "228187_2.jpg"
}
},
"sku": "228187"
}
]

谢谢!

假设您的意思是您的负载看起来像这样,我在这里进行一些猜测...

{
   "entry":{
      "media_type":"image",
      "position":[
         "1",
         "2"
      ],
      "disabled":false,
      "types":[
         "image",
         "small_image",
         "thumbnail"
      ],
      "content":{
         "base64_encoded_data":[
            "/9j/4ReLRXhpZgAATU0AKgAAAAgA....",
            "/9j/8ReLRXhpZgAATU0AKgAAAAgA...."
         ],
         "type":"image/jpeg",
         "name":[
            "228186_1.jpg",
            "228187_2.jpg"
         ]
      },
      "sku":[
         "228186",
         "228187"
      ]
   }
}

然后还要猜测你想要的输出的形状...

%dw 2.0
output application/json
var indices = payload.entry.position map ($ as Number) - 1
---
indices map {
    (payload.entry - "content" - "sku" - "position"),
    position: payload.entry.position[$],
    content: {
        base64_encoded_data: payload.entry.content.base64_encoded_data[$],
        "type": payload.entry.content."type",
        name: payload.entry.content.name[$]
    },
    sku: payload.entry.sku[$]
}

我可以确定的是,我们是否可以依赖位置对象作为它们在有效负载中的位置,或者表示其他含义。您也可以将其更改为 var indices = 0 to sizeOf(payload.entry.position) - 1

创建:

[
  {
    "media_type": "image",
    "position": "1",
    "disabled": false,
    "types": [
      "image",
      "small_image",
      "thumbnail"
    ],
    "content": {
      "base64_encoded_data": "/9j/4ReLRXhpZgAATU0AKgAAAAgA....",
      "type": "image/jpeg",
      "name": "228186_1.jpg"
    },
    "sku": "228186"
  },
  {
    "media_type": "image",
    "position": "2",
    "disabled": false,
    "types": [
      "image",
      "small_image",
      "thumbnail"
    ],
    "content": {
      "base64_encoded_data": "/9j/8ReLRXhpZgAATU0AKgAAAAgA....",
      "type": "image/jpeg",
      "name": "228187_2.jpg"
    },
    "sku": "228187"
  }
]

通过保留顺序使与迈克尔·琼斯相同的有效载荷假设更精确

如果您输入的是对象数组,请使用:

%dw 2.0
import * from dw::util::Values
output application/json
---
flatten(payload map(v1, k1) ->
    (v1.entry.position) map(v2, k2) ->
    entry:{
        "media_type": v1.entry.media_type,
        "position": v1.entry.position[k2],
        "disabled":v1.entry.disabled,
        "types": v1.entry.types,
        "content": {
            "base64_encoded_data": v1.entry.content.base64_encoded_data,
            "type": v1.entry.content."type",
            "name": v1.entry.content.name[k2]
        },
        "sku": v1.entry.sku[k2]
})

请注意,在您输入的“类型”中,您给出的是

"types": {
        "image",
      "small_image",
      "thumbnail"
}

字符串对象,不正确。一个对象总是有键和值,所以我假设它是这样的:

"types": [
        "image",
      "small_image",
      "thumbnail"
]

如果您的输入是对象的对象,您可以使用:

%dw 2.0
output application/json
var indices = payload.entry.position map ($ as Number) - 1
---
indices map entry:{
    (payload.entry - "content" - "sku" - "position" - "disabled" - "types"),
    position: payload.entry.position[$],
    (payload.entry - "content" - "sku" - "position" - "media_type" - "types"),
    (payload.entry - "content" - "sku" - "position" - "disabled" - "media_type"),
    content: {
        base64_encoded_data: payload.entry.content.base64_encoded_data[$],
        "type": payload.entry.content."type",
        name: payload.entry.content.name[$]
    },
    sku: payload.entry.sku[$]
}