简体   繁体   中英

Reading json data into java objects

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM