Skip to content
Advertisement

How to convert a value fetched from json file to a list in javascript

I have a string with comma separated values in json file and want to convert it to a list to iterate through for loop and click on each element.Please help me on this !

testdata.json :

{"optionsList":"China - English,France - English,South Korea - English,Japan - English,Brazil - English"}

code:

var optionsLocator="//a[normalize-space()='%d']";

this.verifyOptionsList=async function(){
        let options = await getTestData(testData, "optionsList");
        var listOfOptions=JSON.parse(JSON.stringify(options));
        logger.info("options list : ", listOfOptions);
        for (let i = 0; i < listOfOptions.length; i++) {
            var replaceOption = optionsLocator.replace("%d", listOfOptions[i]);
            logger.info("Search Option :",replaceOption);
            var optionLoc = element(by.xpath(replaceOption));
            await clickElement(optionLoc);
       }
    }

output :

options list :  China - English,France - English,South Korea - English,Japan - English,Brazil - English

Search Option : '//a[normalize-space()='C']'

Advertisement

Answer

I think the easiest way is to do it by parts, you can first remove the - using the split function, then it will result into an array like:

[
  "China",
  "English,France",
  "English,South Korea",
  "English,Japan",
  "English,Brazil",
  "English"
]

then iterating over each one of the strings and using split you will be able to separate the strings that has ,. resulting in something like:

[
  [
    "China"
  ],
  [
    "English",
    "France"
  ],
  [
    "English",
    "South Korea"
  ],
  [
    "English",
    "Japan"
  ],
  [
    "English",
    "Brazil"
  ],
  [
    "English"
  ]
]

then you can flat this array using the function flat of the arrays.

here you ahve a working sample:

const response = {
  "optionsList": "China - English,France - English,South Korea - English,Japan - English,Brazil - English"
}

const options = response.optionsList

const splitByDash = options.split(' - ');
const splitByComa = splitByDash.map(str => str.split(","))
const result = splitByComa.flat();

console.log(result)
Advertisement