如何解析json文件并从下面的json文件中检索“tableName”和“schema”字段

时间:2015-04-27 09:38:21

标签: java json

我的要求是创建一个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"
      }
   ]
}

3 个答案:

答案 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