JMESPath - объединение элементов во вложенном массиве - PullRequest
0 голосов
/ 30 мая 2018

У меня есть JSON

{
"key": "processId-29231",
"fields": {
    "attachment": [
        {
            "id": "79572",
            "filename": "File1.png"
        },
        {
            "id": "74620",
            "filename": "File2.docx"
        },
        {
            "id": "79072",
            "filename": "File3.xlsx"
        }
    ]
  }
}

Мне нужно перестроить его на этот

{
"processId": "processId-29231",
"attachments": [

               "https://example.com/files/79572/File1.png",
               "https://example.com/files/79572/File2.docx",
               "https://example.com/files/79572/File1.xlsx",
                ]
    }

Я мог бы сделать эту работу с определенным индексом массива

{processID:key,attachments:join('',['https://example.com/files/',fields.attachment[1].id,'/',fields.attachment[1].filename])}

который дает этот результат

{
 "processID": "processId-29231",
 "attachments": "https://example.com/files/74620/File2.docx"
}

Я пробовал это без индекса массива двумя способами

this

 {processID:key,attachments:join('',['https://example.com/',fields.attachment[].id,'/',fields.attachment[].filename])}

и это

{processID:key,attachments:join('', ['https://example.com/',fields.attachment[*].id,'/',fields.attachment[*].filename])}

но это не помогло.

Какие-нибудь советы, как это можно решить?

1 Ответ

0 голосов
/ 30 мая 2018

Необходимо применить функцию к каждому элементу массива и получить доступ к текущему узлу с помощью @

{processID:key,attachments: fields.attachment[].join('',['https://example.com/files/', @.id, '/', @.filename])}

http://jmespath.org/specification.html#functions

...