2015-04-27 20 views
-7

我的需求是創建一個包含key作爲tableName和value作爲json文件中的schema字段內的元素的映射。如何解析json文件並從下面的json文件中檢索「tableName」和「schema」字段

{ 
    "status":"success", 
    "tables":[ 
     { 
     "dbname":"idn", 
     "tableName":"my_monthly_hits_b", 
     "schema":"(cm11:chararray)", 
     "location":"/user/mydb/" 
     }, 
     { 
     "dbname":"idn", 
     "tableName": "my_monthly_match", 
     "schema":"(city:chararray,match:chararray,cm11:chararray)", 
     "location":"/user/mydb1" 
     } 
    ] 
} 
+0

哎,看起來你是新來的StackOverflow。先看看這個:http://stackoverflow.com/help/on-topic – gldraphael

回答

0

我嘗試了以下code.But我不想做字符串manipulation.Is有沒有辦法讓把TableMane和架構到地圖沒有做字符串操作。

public Map<String,Map<String,String>> getDataTypes(String responsePath){ 
    Map<String,Map<String,String>> maped = new HashMap<String,Map<String,String>>(); 
Map<String,String> colDataTypes = new HashMap<String,String>(); 
try{ 
JsonParser parser = new JsonParser(); 
Object obj = parser.parse(new FileReader(responsePath); 
JsonObject jObj = (JsonObject) obj; 
JsonArray jArray = (JsonArray) jObj.get("tables"); 
Iterator<JsonElement> itr = jArray.iterator(); 

while(itr.hasNext()) 
{ 
    JsonObject innerObj = (JsonObject) itr.next(); 
    JsonElement shm = innerObj.get("schema"); 
    JsonElement jTableName = innerObj.get("tableName"); 
    String tableName = jTableName.toString(); 
    String ss = shm.toString().replaceAll("\"","").replaceAll("[()]",""): 
    System.out.println("The required JSON string --->" + ss); 
    if(ss.contains(","){ 
     String[] str = ss.split(","); 
     for(String s: str){ 
      String[] ptr = s.split(":"); 
      colDataTypes.put(prt[0],ptr[1]); 
     } 
    } 
    else{ 
     String[] str1 = ss.split(":"); 
     colDataTypes.put(str1[0],str1[1]); 
    } 
    maped.put(tabName,colDataTypes); 
    for(String tab : maped.keySet()){ 
    System.out.println("#####" + "Table Name " + tab + "value" + maped.get(tab)); 
} 
} 
} 
catch(FileNotFoundException ex) 
{ 
} 
return maped; 
} 
+0

加入這個問題 – gldraphael

0

有幾種工具可以將json解析爲java類,如果你發現它更容易遍歷。例如fasterxml ObjectMapper。 http://wiki.fasterxml.com/JacksonInFiveMinutes

那麼這個JSON可以填充到一個Java類,如

class MyInput{ 
    private String status; 
    private MyTable[] tables; 
    ... 
} 
class MyTable{ 
    String dbname; 
    String tableName; 
    ... 
} 

,一旦fasterxml填充它適合你,你可以託普在表和你想和他們有什麼(例如建立一個地圖)

0

使用GSON庫。

你的模型類將是這樣的:

public class Table 
{ 
    private String dbname; 
    private String tableName; 
    private String schema; 
    private String location; 

    public String getDbname() 
    { 
     return dbname; 
    } 
    public String setDbname(String value) 
    { 
     dbname = value; 
    } 

    // ... add getters and setters for the remaining fields too 
} 

public class JsonRoot // give it an appropriate name 
{ 
    private String status; 
    private List<Table> tables; 

    // ... add getters and setters for the above fields 
} 

使用GSON庫,你就可以將JSON字符串轉換成JsonRoot對象。

相關鏈接:
https://github.com/google/gson http://search.maven.org/#artifactdetails|com.google.code.gson|gson|2.3.1|jar