当前位置: 首页 > 知识库问答 >
问题:

如何从Avro模式中获取所有的字段名?

蒋烨然
2023-03-14

我有一个avro架构,我想从中提取所有字段名称。有什么办法可以做到这一点吗?

测试架构是这样的:

{
    "type": "record",
    "name": "wpmcn.MyPair",
    "doc": "A pair of strings",
    "fields": [
        {"name": "left", "type": "string"},
        {"name": "right", "type": "string"}
    ]
}

这是代码:

  public static void main(String[] args) throws IOException {
    Schema schema =
        new Schema.Parser().parse(AvroTest.class.getClassLoader().getResourceAsStream("pair.avsc"));
    System.out.println(schema.getFields());
  }

以上是这样打印出来的:

[left type:STRING pos:0, right type:STRING pos:1]

但我希望它只返回数组列表中的“左”和“右”,而不返回其他内容。现在,它还返回类型和pos,我不需要它们。有什么办法可以做到吗?

共有3个答案

郎伟兆
2023-03-14

<代码>

schema.getFields().forEach(System.out::println)// print
schema.getFields().stream().map(Schema.Field::name) // collect
易衡
2023-03-14
 Schema.getClassSchema().getFields()
卫博学
2023-03-14

您可以使用<code>字段来完成此操作。name()如下所示:

public static void main(String[] args) throws IOException {
    Schema schema =
         new Schema.Parser().parse(AvroTest.class.getClassLoader().
           getResourceAsStream("pair.avsc"));

     //Collect all field values to an array list
     List<String> fieldValues = new ArrayList<>();
     for(Field field : schema.getFields()) {
            fieldValues.add(field.name());
      }

      //Iterate the arraylist
      for(String value: fieldValues)  {
           System.out.println(value);
      }
  }
 类似资料:
  • 问题内容: 我怎么知道我可以从对象/界面访问的字段?我尝试过反射,但看来您必须首先知道字段名称。如果我需要了解所有可用字段怎么办? 问题答案: 您可以使用该函数获取类型描述符。从那里,您可以列出存储在界面中的动态值的字段。 例: 输出: 调用的结果是一个值为,其中包含字段名称以及其他内容: 如果还需要这些字段的值,则可以使用获取,然后可以使用或: 输出: 在Go Playground上尝试一下。

  • 问题内容: 我的观点超过15 。我必须为所有设置bottomBorder(extension)。我可以一一设置所有功能,也可以正常工作。我想一次设置所有的底部边框。这是我正在尝试的代码,但似乎for循环未执行。我什至尝试过,但是for循环也没有执行。 问题答案: 我让它工作了,但是仍然需要解释 为什么有问题的代码无法工作, 我是从论坛的某个地方获得的,不能完全相信答案。 在viewDidLoad或

  • 问题内容: 我正在做大学项目。 我需要从课堂上获取所有字段。甚至是私有的并继承的。我试图获取所有声明的字段,然后转换为超类并重复。我的代码片段: 但这行不通。强制转换后仍然是同一类(不是超类)。 我将感谢您提供任何有关如何解决铸造问题或如何以其他方式检索这些字段的帮助。 问题不是要访问字段,而是要获取字段名称! 我以这种方式进行管理: 问题答案: obj = obj.getClass().getS

  • 我试图设置一个聊天应用程序,在其中你可以搜索随机的用户交谈。现在,firestore中的数据库结构如下: 集合“users”-文档“userid”-集合“conversations”-文档“conversationid”-字段“partner”,“lastmessage” 其次,我有一个集合“conversations”,其中包含对话中的所有消息。 我现在尝试做的是,当你按下一个按钮时,应用程序将

  • 我尝试向kafka发布/使用我的java对象。我使用Avro模式。 我的基本程序运行良好。在我的程序中,我在生产者(用于编码)和消费者(用于解码)中使用我的模式。 如果我在接收者处将不同的对象发布到不同的主题(例如:100个主题),我不知道我收到了什么类型的消息?...我想从接收到的字节中获取avro模式,并想将其用于解码...我的理解正确吗?如果是这样,我如何从接收到的对象中检索?

  • 我是新的MongoDB工作,我需要在以下方面的帮助。