Home | About | Sematext search-lucene.com search-hadoop.com
NEW: Monitor These Apps!
elasticsearch, apache solr, apache hbase, hadoop, redis, casssandra, amazon cloudwatch, mysql, memcached, apache kafka, apache zookeeper, apache storm, ubuntu, centOS, red hat, debian, puppet labs, java, senseiDB
 Search Hadoop and all its subprojects:

Switch to Threaded View
Avro >> mail # user >> help required with json substructure parsing


Copy link to this message
-
help required with json substructure parsing
Hello Folks,

First of all, great work. Avro is fantastic.

question.
I have a json as shown below.
I would like to parse person fields including ip_addr so that
it can be packed.

   const char  PERSON_SCHEMA[]             "{\
                \"type\":\"record\",\
                \"name\":\"Person\",\
                \"fields\":[\
                    {\"name\": \"ID\", \"type\": \"long\"},\
                    {\"name\": \"FirstName\", \"type\": \"string\"},\
                    {\"name\": \"Email\", \"type\": \"string\"}\
                    {\
                        \"type\"   : \"record\",\
                        \"name\"   : \"ipaddr\",\
                        \"fields\" : [\
                            {\"name\": \"Fixed16\", \"type\": \"fixed\",
\"size\":16},\
                            {\"name\": \"Fixed4\", \"type\": \"fixed\",
\"size\":4},\
                            { \"name\" : \"ip_family\", \"type\" : \"long\"
},\
                            { \"name\" : \"hostip\", \"type\" :
[\"Fixed4\", \"Fixed16\"]},\
                        ]\
                    }\
                ]\
             }";

The original add_function is below.

    void
        add_person(avro_file_writer_t db, const char *name, const char
*email,
                const char *phone, char* ip, long iptype)
        {
            avro_datum_t person = avro_record(person_schema);
            avro_datum_t id_datum = avro_int64(++id);
            avro_datum_t name_datum = avro_string(name);
            avro_datum_t email_datum = avro_string(email);
            if (avro_record_set(person, "ID", id_datum)
                    || avro_record_set(person, "FirstName", name_datum)
                    || avro_record_set(person, "Email", email_datum)) {
                fprintf(stderr, "Unable to create Person datum
structure\n");
                exit(EXIT_FAILURE);
            }
            if (avro_file_writer_append(db, person)) {
                fprintf(stderr,
                        "Unable to write Person datum to memory
buffer\nMessage: %s\n", avro_strerror());
                exit(EXIT_FAILURE);
            }
            /* Decrement all our references to prevent memory from leaking
*/
            avro_datum_decref(id_datum);
            avro_datum_decref(name_datum);
            avro_datum_decref(email_datum);
            avro_datum_decref(person);
        }
would someone kindly let me know how to modify it so that I can parse
the ip_addr field as well?
thanks in advance
NEW: Monitor These Apps!
elasticsearch, apache solr, apache hbase, hadoop, redis, casssandra, amazon cloudwatch, mysql, memcached, apache kafka, apache zookeeper, apache storm, ubuntu, centOS, red hat, debian, puppet labs, java, senseiDB