Hi, I haven't tried that but it could be done something like this
avro_schema_from_json(some_schema, strlen(some_schema), &schema, &error) iface = avro_generic_class_from_schema(schema); avro_generic_value_new(iface, &value); const char *field_name = avro_schema_record_field_name(&value, index); Then compare -Mika On Sep 25, 2013, at 11:18 AM, Mahesh V <[email protected]> wrote: > Thanks Mika, > It worked like a charm. > > I have another question. > If given a field name "ip_v4" how can I query the json to reach the right > place without knowing the names? > i.e. I want to get each field by index and check its name to see if it > matches the one provided. > > e.g. pseudo code > search_json(schema, name) { > val = get_value_by_index( 0) > if strcmp(val->name, name) { > I found my field; > } > } > > Is this possible at all? > thanks > Mahesh > > > > > On Wed, Sep 25, 2013 at 12:43 AM, Mika Ristimaki <[email protected]> > wrote: > Hi, > > I can't really help with the datum api since I haven't used it myself, but > with newer avro_value api arrays should work like this: > > avro_value_iface_t *iface; > avro_value_t value, array, element, field; > avro_schema_t schema; > avro_schema_error_t error; > > avro_schema_from_json(some_schema, strlen(some_schema), &schema, &error); > > iface = avro_generic_class_from_schema(schema); > avro_generic_value_new(iface, &value); > > avro_value_get_by_name(&value, "some_array", &array, NULL); > avro_value_append(&array, &element,NULL); > > avro_value_get_by_name(&element, "array_record_var_1", &field, NULL); > avro_value_set_int(&field,123); > > avro_value_get_by_name(&element, "array_record_var_2", &field, NULL); > avro_value_set_boolean(&field,1); > > etc. > > I didn't try this at all, so there'll be typos and other errors, but hope it > helps to find the solution…. > > -Mika > > > On Sep 24, 2013, at 6:33 PM, Mahesh V <[email protected]> wrote: > > > Hi, > > > > given a schema as shown below, how can I set values > > to the record "array_record_1" in the array below.? > > > > Any help will be appreciated. > > thanks > > Mahesh > > > > avro_schema_t array_schema = avro_schema_get_subschema(sw_schema, > > "some_array"); > > array_datum = avro_array(array_schema); > > ^^^^^ this works fine. > > > > avro_schema_t array_rec_schema = avro_schema_get_subschema(sw_schema, > > "array_record_1"); > > array_rec_datum = avro_record(array_rec_schema); > > ^^^^ this fails > > > > char *some_schema = > > "{" > > "\"type\":\"record\", \"name\" : \"some_schema\", \"fields\": [ " > > "{ \"name\" : \"some_var_a\" , \"type\" : \"int\" }," > > "{" > > "\"name\" : \"some_ip\", \"type\" : {" > > "\"type\":\"record\", \"name\" : \"some_ip\", \"fields\" : [ " > > " { \"name\" : \"ip_version\", \"type\" : \"int\" }," > > " { \"name\" : \"ip_v4\", \"type\" : \"long\" }," > > " { \"name\" : \"ip_v6\", \"type\" : \"string\" }" > > "]}}," > > "{ \"name\" : \"some_array\" , \"type\" : " > > " { \"type\":\"array\", \"items\": " > > "{" > > "\"type\":\"record\", \"name\" : \"array_record_1\", \"fields\": [ " > > "{ \"name\" : \"array_record_var_1\" , \"type\" : \"int\" }," > > "{ \"name\" : \"array_record_var_2\" , \"type\" : \"boolean\" } " > > "]" > > "}" > >
