【问题标题】:How to parse a json file and retrieve the "tableName" and "schema" fields from the below json file [duplicate]如何解析json文件并从下面的json文件中检索“tableName”和“schema”字段[重复]
【发布时间】:2015-07-05 16:33:46
【问题描述】:

我的要求是创建一个映射,其中包含作为 tableName 的键和作为 json 文件中架构字段内的元素的值。

{
  "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"
      }
   ]
}

【问题讨论】:

标签: java json


【解决方案1】:

我尝试了下面的代码。但我不想进行字符串操作。有没有办法在不进行字符串操作的情况下将 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;
} 

【讨论】:

  • 将此添加到问题中
【解决方案2】:

如果您发现更容易遍历,有几种工具可以将 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;
  ...
}

一旦 fastxml 为您填充了它,您就可以覆盖表格并用它们做您想做的事情(例如构建地图)

【讨论】:

    【解决方案3】:

    使用 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

    【讨论】:

      猜你喜欢
      • 2014-05-08
      • 2020-07-01
      • 1970-01-01
      • 2014-03-20
      • 2020-09-30
      • 2012-06-16
      • 2012-02-14
      • 2018-04-07
      相关资源
      最近更新 更多