我正在Objective-C中编程。我正在使用Apache Avro进行数据序列化。将arrary数据设置为使用C语言的Avro数组类型
我的Avro的模式是这样的:
{
"name": "School",
"type":"record",
"fields":[
{
"name":"Employees",
"type":["null", {"type": "array",
"items":{
"name":"Teacher",
"type":"record",
"fields":[
{"name":"name", "type":"string"}
{"name":"age", "type":"int"}
]
}
}
],
"default":null
}
]
}
在我的Objective-C代码,我有Teacher
对象的数组,每个老师对象包含name
& age
值。
我想用上面显示的模式使用Avro将教师数组数据写入文件。我主要关心如何将数据写入上述模式中定义的Employees
数组。
这里是我的代码(我用C代码风格做到这一点,我按照Avro C documentation):
// I don't show this function, it constructs the a `avro_value_t` based on the schema. No problem here.
avro_value_t school = [self constructSchoolValueForSchema];
// get "Employees" field
avro_value_t employees;
avro_value_get_by_name(school, "employees", &employees, 0);
int idx = 0;
for (Teacher *teacher in teacherArray) {
// get name and age
NSString *name = teacher.name;
int age = teacher.age;
// set value to avro data type.
// here 'unionField' is the field of 'Employees', it is a Avro union type which is either null or an array as defined in schema above
avro_value_t field, unionField;
avro_value_set_branch(&employees, 1, &unionField);
// based on documentation, I should use 'avro_value_append'
avro_value_append(&employees, name, idx);
// I get confused here!!!!
// in above line of code, I append 'name' to 'employees',
//which looks not correct,
// because the 'Employees' array is an array of 'Teacher', not arrary of 'name'
// What is the correct way to add teacher to 'employees' ?
idx ++;
}
我想问的问题,实际上是在上面的代码注释。
我遵循Avro C文档,但我迷路了我怎么能把每个teacher
加到employees
?在我上面的代码中,我只将每个老师的name
添加到employees
数组中。