将json数据读入java对象

时间:2014-03-31 03:54:10

标签: java json

我正在使用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列? (依此类推)

感谢任何帮助: - )

2 个答案:

答案 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();
 }
}