我正在使用java将Excel中的数据读入这样的json数组:
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);
我的excel文件如下所示:
TestCase SearchString PageTitle
TC1.01 Ferrari Ferrari - Google Searching
TC1.02 Toyota Toyota - Google Searching
TC1.03 Mazda Google
TC1.04 Volvo Google
第一行是我的列名。
当我打印出我的价值时,我得到了这个:
{"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"]}]}
如何使用java中的数据映射列名?例如:如何使用Ferarri映射SearchString列? (依此类推)
感谢任何帮助: - )
答案 0 :(得分:0)
我认为你不能直接使用普通的JSON库。
尝试处理&#34;标题&#34;当您从Excel中读取并构建JSON时,单独行。您应该尝试生成如下所示的JSON:
{"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"]
}
]
}
(每个数据行都成为一个地图,并且具有键作为列名)
然后将其映射到POJO应该对任何JSON库都是微不足道的。
答案 1 :(得分:0)
感谢您的所有回复。
我最终做了类似这样的事情,对我有用。
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();
}
}