I am reading data from Excel using java into a json array like this:
FileInputStream inp = new FileInputStream("C://temp/testdata.xls");
HSSFWorkbook workbook = new HSSFWorkbook(inp);
// Get the first Sheet.
Sheet sheet = workbook.getSheetAt(0);
//Start constructing JSON.
JSONObject json = new JSONObject();
// Iterate through the rows.
JSONArray rows = new JSONArray();
for ( Iterator<Row> rowsIT = sheet.rowIterator(); rowsIT.hasNext(); )
{
Row row = rowsIT.next();
JSONObject jRow = new JSONObject();
// Iterate through the cells.
JSONArray cells = new JSONArray();
for ( Iterator<Cell> cellsIT = row.cellIterator(); cellsIT.hasNext(); )
{
Cell cell = cellsIT.next();
cells.put( cell.getStringCellValue() );
}
jRow.put( "cell", cells );
rows.put( jRow );
}
// Create the JSON.
json.put("rows", rows);
myvalue = json.toString();
System.out.println(myvalue);
My excel file looks like this:
TestCase SearchString PageTitle
TC1.01 Ferrari Ferrari - Google Searching
TC1.02 Toyota Toyota - Google Searching
TC1.03 Mazda Google
TC1.04 Volvo Google
First row is my column names.
When I print my values out I get this:
{"rows":[{"cell":["TestCase","SearchString","PageTitle"]},{"cell":["TC1.01","Ferrari","Ferrari - Google Searching"]},{"cell":["TC1.02","Toyota","Toyota - Google Searching"]},{"cell":["TC1.03","Mazda","Google"]},{"cell":["TC1.04","Volvo","Google"]}]}
How do I map the column names with the data in java? For example: How can I map the SearchString column with Ferarri? (and so on)
Would appreciate any help :-)
I don't think you can do so directly with normal JSON library.
Try to handle the "header" line separately when you are reading from the Excel and constructing the JSON. You should try to produce a JSON looks like this:
{"rows":[
{
"TestCase" : "TC1.01",
"SearchString" : "Ferrari",
"PageTitle" : "Ferrari - Google Searching"]
},
{
"TestCase" : "TC1.02",
"SearchString" : "Toyota",
"PageTitle" : "Toyota - Google Searching"]
},
{
"TestCase" : "TC1.03",
"SearchString" : "Mazda",
"PageTitle" : "Google"]
},
{
"TestCase" : "TC1.04",
"SearchString" : "Volvo",
"PageTitle" : "Google"]
}
]
}
(every data row become a map and having key as the column name)
Then mapping this to a POJO should be trivial with any of the JSON libs.
Thanks for all your replies.
I ended up doing something like this which works for me.
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Before;
import org.junit.Test;
import java.io.FileInputStream;
import java.io.IOException;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class Excel_Example {
@Before
public void setup(){
System.setProperty("webdriver.chrome.driver", "C://temp/chromedriver/chromedriver.exe");
}
@Test
public void test() throws JSONException {
try {
// Open the Excel file
FileInputStream fis = new FileInputStream("C://temp/testdata.xls");
// Access the required test data sheet
HSSFWorkbook wb = new HSSFWorkbook(fis);
HSSFSheet sheet = wb.getSheet("testdata");
// Loop through all rows in the sheet
// Start at row 1 as row 0 is our header row
for(int count = 1;count<=sheet.getLastRowNum();count++){
HSSFRow row = sheet.getRow(count);
System.out.println("Running test case " + row.getCell(0).toString());
//Start constructing JSON.
JSONObject json = new JSONObject();
json.put("SearchString", row.getCell(1).toString());
json.put("PageTitle", row.getCell(2).toString());
// Run the test for the current test data row
runTest(json.getString("SearchString").toString(),json.getString("PageTitle").toString());
}
fis.close();
} catch (IOException e) {
System.out.println("Test data file not found");
}
}
public static void runTest(String strSearchString, String strPageTitle) {
// Start a browser driver and navigate to Google
WebDriver driver = new ChromeDriver();
driver.get("http://www.google.com");
// Enter the search string and send it
WebElement element = driver.findElement(By.name("q"));
element.sendKeys(strSearchString);
element.submit();
// Check the title of the page
if (driver.getTitle().equals(strPageTitle)) {
System.out.println("Page title is " + strPageTitle + ", as expected");
} else {
System.out.println("Expected page title was " + strPageTitle + ", but was " + driver.getTitle() + " instead");
}
//Close the browser
driver.quit();
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.