我的要求是创建一个map,其中包含keyName作为tableName,value作为json文件中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 :(得分:0)
我尝试了以下代码。但我不想做字符串操作。有没有办法将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;
}
答案 1 :(得分:0)
如果您发现json更容易遍历,有几种工具可以将json解析为java类。例如fastxml ObjectMapper。 http://wiki.fasterxml.com/JacksonInFiveMinutes
然后可以将这个json填充到java类中,例如
class MyInput{
private String status;
private MyTable[] tables;
...
}
class MyTable{
String dbname;
String tableName;
...
}
并且一旦fastxml为你填充它,你可以跳过表并用它们做你想做的事情(例如构建地图)
答案 2 :(得分: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