2016-02-28 90 views
0

我试图检索雇员和部门表使用keyset.I有jsonObject的hashmap.How我可以迭代Employee.employeeId使用for循环任何人都可以请帮我...如何通过循环使用键集迭代散列表

我simple.json:

{ 
    "routings": { 
     "routing1": { 
      "targetCollection-name": "EmployeeData", 
      "sourcetables-data": { 
       "Employee": [{ 
        "name": "employeeId", 
        "sourceDataType": "number", 
        "targetField": "employeeId", 
        "targetDataType": "double" 
       }, { 
        "name": "firstName", 
        "sourceDataType": "varchar2", 
        "targetField": "firstName", 
        "targetDataType": "string" 
       }, { 
        "name": "lastName", 
        " sourceDataType": "varchar2", 
        "targetField": "lastName", 
        "targetDataType": "string" 
       }, { 
        "name": "contactNumber1", 
        "sourceDataType": "number", 
        "targetField": "contactNumbers", 
        "targetDataType": "array" 
       }], 
       "department": [{ 
        "name": "departmentNumber", 
        "sourceDataType": "number", 
        "targetField": "departmentNumber", 
        "targetDataType": "double" 
       }, { 
        "name": "departmentType", 
        "sourceDataType": "number", 
        "targetField": "departmentType", 
        "targetDataType": "double" 
       }, { 
        "name": "startDate", 
        "sourceDataType": "timestamp", 
        "targetField": "startDate", 
        "targetDataType": "date" 
       }], 
       "foriegnkey": [{ 
        "parentTable": "Employee", 
        "parentkey": "employeeId", 
        "childTable": "department", 
        "childKey": "empId" 
       }] 
      } 
     } 
    } 

} 

我的代码:

public class DataParse { 

    public static void main(String a[]){ 

     String FILEPATH = "C:\\Users\\BNSK\\Downloads\\simple.json"; 

     Map<String,Object> resultMap = new HashMap<String,Object>(); 
     ObjectMapper mapperObj = new ObjectMapper(); 

     System.out.println("Input Json: "+FILEPATH); 
     try { 
      resultMap = mapperObj.readValue(new File(FILEPATH), 
          new TypeReference<HashMap<String,Object>>(){}); 
      System.out.println("Output Map: "+resultMap); 


for (String key : resultMap.keySet()) { 
      Object routings= resultMap.get(key); 
      System.out.println(routings); 

     } 



     } catch (IOException e) { 

      e.printStackTrace(); 
     } 
    } 
+0

你'表的结构simple.json'只是描述。而'employeeId'只会有单一的价值。你如何去迭代单个值? –

+0

我想从使用键集的两个表中检索所有列值。 – dev777

+0

这里,路由是我的价值。从价值,我应该再次分裂成关键,价值pairs.Iow我可以做 – dev777

回答

0

作为例子:

Map routings = (Map)resultMap.get("routings"); 

    // lets iterate every routing in routings 
    for(Object routingKey : routings.keySet()){ 

     Map routing = (Map)routings.get(routingKey); 
     Map tableData = (Map)routing.get("sourcetables-data"); 

     List employeeList = (List)tableData.get("Employee"); 
     //lets print all names of Employee 
     for(Object item : employeeList){ 
      Map field = (Map)item; 
      Object name = field.get("name"); 
      Object value = field.get(name); 
      System.out.println(name+"="+value); 
     } 
    } 
1

艾略特是对的,我也想补充一点,在Java中8,你可以使用流(和lambd一个表达式),可以轻松地迭代映射键

resultMap.keySet().stream().forEach(key -> { 
    // do your thing here 
});