Forum Discussion

skodali's avatar
skodali
New Contributor III
7 years ago
Solved

Convert comma separated values into different rows

I’m trying to convert the comma separated values in a single row to a different number of rows.

Can anyone suggest me how should I approach?

  • I wanted to provide a solution that used the expression language in case others are interested.

    Strings have a split() method that will split the string and return an array. From there, you can use the map() method to create key/value pairs, like so:

    $Roles.split(',').map((elem, index) => ["Role" + (index + 1), elem])
    

    (The argument to map() is a callback function that will be called with each element in the array and its index. The function then creates an array with the first element being the property name “RoleN” and the second being the element itself.)

    Once you have key/value pairs, you can feed it into the extend() method on objects to produce an object with the given pairs:

    $.extend($Roles.split(',').map((elem, index) => ["Role" + (index + 1), elem]))
    

    Here’s an example pipeline:

    SplitRoles_2019_01_24.slp (6.7 KB)

7 Replies

    • umashankar316's avatar
      umashankar316
      New Contributor II

      Usually JSON splitter snap will be used to perform this activity, so that in preceding snaps you can combine together and generate XLS data as output.

    • skodali's avatar
      skodali
      New Contributor III

      Thanks Ajay it solves the issue.

  • tstack's avatar
    tstack
    Former Employee

    I wanted to provide a solution that used the expression language in case others are interested.

    Strings have a split() method that will split the string and return an array. From there, you can use the map() method to create key/value pairs, like so:

    $Roles.split(',').map((elem, index) => ["Role" + (index + 1), elem])
    

    (The argument to map() is a callback function that will be called with each element in the array and its index. The function then creates an array with the first element being the property name “RoleN” and the second being the element itself.)

    Once you have key/value pairs, you can feed it into the extend() method on objects to produce an object with the given pairs:

    $.extend($Roles.split(',').map((elem, index) => ["Role" + (index + 1), elem]))
    

    Here’s an example pipeline:

    SplitRoles_2019_01_24.slp (6.7 KB)

    • sawierman's avatar
      sawierman
      New Contributor

      Hello tstack,

      I am trying to something similar, however, it is not working for me. I have a Json field that is comma-delimited named “instructors”. Sometimes this field contains one instructor id number, and sometimes it contains two. I would like these to go into separate table columns of Instructor1 and Instructor2.

      I my instructor mapper I did:

      and my second mapper I did:

      My pipeline validates, however, there is no output from my second mapper.

      I would greatly appreciate any assistance you can provide.

      Thanks,
      sawierman

      • tstack's avatar
        tstack
        Former Employee

        Did you enable Passthrough on the second mapper?