Вывод в формате Json с использованием dataweave

Я пытаюсь преобразовать сопоставление значений полей из формата CSV в формат Json, ниже приведен код моего файла данных для сопоставления полей из CSV и преобразования его в формат Json:

%dw 1.0    
%output application/json    
---    
{

"volume":
[       
    payload groupBy $.StartDate map ((val,cal) ->
    {
        StartDate:val.StartDate[0],

        rows :
        [
            {
                AccountID : val.AccountID,
                ProductID : val.ProductID,
                Value : val.Value
            }
        ]
    }
    )
]    
}

Я получаю вывод, как показано ниже: -

{

"volume": [
[
  {
    "StartDate": "8/1/2016",
    "AccountID": [
      "16482965",
      "16482966"
    ],
    "ProductID": [
      "12235398476-AR02",
      "12235398477-AR03"
    ],
    "Value": [
      "1720",
      "1722"
    ]
  },
  .
  .
  .

Но я хочу, чтобы мой результат выглядел так, как показано ниже:

  {

"volume": [
[
  {
    "StartDate": "8/1/2016",
    "AccountID":"16482965","ProductID":"12235398476-AR02","Value":"1720",
    "AccountID":"16482966","ProductID":"12235398477-AR03","Value": "1722"
   },
     .
     .
     .

Кто-нибудь может здесь угодить?


person user6755654    schedule 14.11.2016    source источник
comment
То, что вы показываете как желаемый JSON, незаконно (или, по крайней мере, непоследовательно). У вас есть два экземпляра AccountID, ProductID и Value. Я предполагаю, что вы хотели иметь одно поле для StartDate и массив структур, каждая структура подобна одной из записей (содержащих AccountID, ProductID и Value).   -  person FDavidov    schedule 14.11.2016
comment
Да @FDavidov - мне нужны все три поля AccountId, ProductId и значение в виде массива структур, сгруппированных по дате начала.   -  person user6755654    schedule 14.11.2016
comment
В качестве ответа добавлю нужную структуру (здесь это сделать невозможно).   -  person FDavidov    schedule 14.11.2016
comment
Конечно @ FDavidov, большое спасибо   -  person user6755654    schedule 14.11.2016


Ответы (2)


Согласно вашему ответу на мой вопрос, вам нужно построить структуру JSON:

{
    "volume": [
                {
                    "StartDate": "8/1/2016",
                    "Entries": [
                                {"AccountID":"16482965","ProductID":"12235398476-AR02","Value":"1720"},
                                {"AccountID":"16482966","ProductID":"12235398477-AR03","Value":"1722"}
                               ]
                },
                ...
              ]
     .
     .
     .
}

Обратите внимание на добавление к структуре элемента "Entries". Это позволит вам пройти через массив, используя такие ссылки, как:

...volume[n].Entries[j].AccountID

Надеюсь, это проясняет вам ситуацию.

ОБНОВЛЕНИЕ: я пропустил закрытие ]. Добавлено сейчас.

person FDavidov    schedule 14.11.2016
comment
Привет @ FDavidov, я вставил обновленный код, но я снова получаю ту же структуру. Не могли бы вы проверить, не пропущено ли что-нибудь !! - person user6755654; 14.11.2016
comment
Боюсь, я не знаю языка, который вы используете для генерации JSON, и, следовательно, могу только догадываться (и, скорее всего, зря теряю ваше время). мои инстинкты подсказывают мне, что проблема в groupBy в начале. Попробуйте удалить / изменить. Если это не сработает ... Я не могу вам помочь дальше. И все же я был бы признателен, если вы подумаете о голосовании за мой ответ, поскольку он вам помог (определение неправильной структуры JSON). - person FDavidov; 14.11.2016
comment
Нет проблем @ FDavidov, мне это немного помогло, и я проголосовал за вас. Спасибо! - person user6755654; 14.11.2016

Я использовал приведенный ниже код, не могли бы вы подтвердить

     %dw 1.0
     %output application/json
     ---
     {
        "Transaction":"111",
        "type":"b002",
        "volume":
        [       
            payload groupBy $.StartDate map ((val,cal) ->
            {
                StartDate:val.StartDate[0],

                "Entries" :
                [
                    {
                        AccountID : val.AccountID,
                        ProductID : val.ProductID,
                        Value : val.Value
                    }
                ]
            }
            )
        ]
     }

And iam still getting the out put as :

            {
        "Transaction": "111",
        "type": "b002",
        "volume": [
          [
            {
              "StartDate": "8/1/2016",
              "Entries": [
                {
                  "AccountID": [
                    "16482965",
                    "16482966"
                  ],
                  "ProductID": [
                    "12235398476-AR02",
                    "12235398477-AR03"
                  ],
                  "Value": [
                    "1720",
                    "1722"
                  ]
                }
              ]
            },
            {
              "StartDate": "7/31/2016",
              "Entries": [
                {
                  "AccountID": [
                    "16482964"
                  ],
                  "ProductID": [
                    "12235398475-AR01"
                  ],
                  "Value": [
                    "1720"
                  ]
                }
              ]
            }   

          ]
        ]
      } 
person user6755654    schedule 14.11.2016
comment
Теперь ваш JSON законный, но не то, что вам нужно. Вы можете использовать этот сайт для проверки структуры сгенерированного JSON. Если есть ошибка, он вам ее покажет. У вас все еще есть лишний [ (например, после "AccountID":). - person FDavidov; 14.11.2016