Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于给定java json注释类的类型信息_Java_Json - Fatal编程技术网

关于给定java json注释类的类型信息

关于给定java json注释类的类型信息,java,json,Java,Json,给定一个JSON注释的Java类,我正在寻找一些实用程序来获取其类型信息 例如,具有以下类别结构: class A extends B { @JsonIgnore int _some_internal_field; int f1; C f2; } class B { boolean f3; String f4; } class C { float f5; } 我想打电话 System.out.println( jsonTypeInfoFrom(A.class)

给定一个JSON注释的Java类,我正在寻找一些实用程序来获取其类型信息

例如,具有以下类别结构:

class A extends B {
  @JsonIgnore
  int _some_internal_field;
  int f1;
  C f2;
}
class B {
  boolean f3;
  String f4;
}
class C {
  float f5;
}
我想打电话

System.out.println(
  jsonTypeInfoFrom(A.class)
 .toString());
并获得:

{
  "f1": "int",
  "f2": {
    "f5": "float"
  },
  "f3": "boolean",
  "f4": "string"
}
在哪里可以找到这样的
jsonTypeInfoFrom(Class)
方法?调查了杰克逊本人,但还没有找到

请帮忙:)

Adrian。

//使用refelcting Api获取声明的字段,并使用HashMap创建json模式
//Use refelcting Api to get the declared fields and create the json schema using HashMap
public static String getJsonSchema(Class clazz) throws IOException {
         Field[] fields = clazz.getDeclaredFields();

         List<Map<String,String>> map=new ArrayList<Map<String,String>>();
         for (Field field : fields) {
             HashMap<String, String> objMap=new  HashMap<String, String>();
             objMap.put("name", field.getName());
             objMap.put("type", field.getType().getSimpleName());
             objMap.put("format", "");
             map.add(objMap);
         }
         ObjectMapper mapper = new ObjectMapper();
         String json = mapper.writeValueAsString(map);

       return json;
    }
公共静态字符串getJsonSchema(类clazz)引发IOException{ Field[]fields=clazz.getDeclaredFields(); 列表映射=新的ArrayList(); 用于(字段:字段){ HashMap objMap=新的HashMap(); put(“name”,field.getName()); put(“type”,field.getType().getSimpleName()); put(“格式”,“格式”); map.add(objMap); } ObjectMapper mapper=新的ObjectMapper(); 字符串json=mapper.writeValueAsString(map); 返回json; }
您可以使用库。可以使用以下依赖项添加库:

>       <dependency>
            <groupId>com.fasterxml.jackson.module</groupId>
            <artifactId>jackson-module-jsonSchema</artifactId>
            <version>2.9.5</version>
        </dependency>

这可能会满足您的需要:我链接的问题的答案似乎不推荐,看起来您应该使用jackson模块(不知道它是否包含在标准的jackson安装中)。两者都会生成一个json模式,该模式不是您要求的格式,但包含相同的数据看起来是一个不错的开始,但它不会忽略带注释的字段。另外,为什么
格式
字段是空的?//获取声明的annotations[]annotations=field.getDeclaredAnnotations();虽然我正在寻找一个班轮。。。这是否适用于任何嵌套级别结构?
  SchemaFactoryWrapper schemaFactory = new SchemaFactoryWrapper();
  ObjectMapper mapper = new ObjectMapper();
  mapper.acceptJsonFormatVisitor(Entity.class, schemaFactory);
  JsonSchema resultSchema = schemaFactory.finalSchema();
  System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(resultSchema));