fixed json format from bufr_dump and added json test

This commit is contained in:
Enrico Fucile 2015-01-07 12:36:43 +00:00
parent 188c7f3d3c
commit 730972c07c
3 changed files with 52 additions and 7 deletions

View File

@ -22,6 +22,7 @@
IMPLEMENTS = init;destroy
MEMBERS = long section_offset
MEMBERS = long begin
MEMBERS = long empty
MEMBERS = long end
END_CLASS_DEF
@ -56,6 +57,7 @@ typedef struct grib_dumper_json {
/* Members defined in json */
long section_offset;
long begin;
long empty;
long end;
} grib_dumper_json;
@ -99,6 +101,7 @@ static int init(grib_dumper* d)
{
grib_dumper_json *self = (grib_dumper_json*)d;
self->section_offset=0;
self->empty=1;
return GRIB_SUCCESS;
}
@ -139,9 +142,11 @@ static void dump_values(grib_dumper* d,grib_accessor* a)
size = 3;
} else more=0;
if (!self->begin) fprintf(self->dumper.out,",\n");
if (self->begin==0 && self->empty==0 ) fprintf(self->dumper.out,",\n");
else self->begin=0;
self->empty=0;
err = grib_set_double(a->parent->h, "missingValue", missing_value);
if (size>1) {
int cols=4;
@ -209,9 +214,11 @@ static void dump_long(grib_dumper* d,grib_accessor* a,const char* comment)
size = 3;
} else more=0;
if (!self->begin) fprintf(self->dumper.out,",\n");
if (self->begin==0 && self->empty==0) fprintf(self->dumper.out,",\n");
else self->begin=0;
self->empty=0;
if (size>1) {
int cols=9;
int count=0;
@ -260,9 +267,11 @@ static void dump_double(grib_dumper* d,grib_accessor* a,const char* comment)
if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0)
return;
if (!self->begin) fprintf(self->dumper.out,",\n");
if (self->begin==0 && self->empty==0) fprintf(self->dumper.out,",\n");
else self->begin=0;
self->empty=0;
fprintf(self->dumper.out,"%-*s",mydepth," ");
if( grib_is_missing_double(a,value) )
fprintf(self->dumper.out,"\"%s\" : null",a->name);
@ -294,9 +303,11 @@ static void dump_string_array(grib_dumper* d,grib_accessor* a,const char* commen
return;
}
if (!self->begin) fprintf(self->dumper.out,",\n");
if (self->begin==0 && self->empty==0) fprintf(self->dumper.out,",\n");
else self->begin=0;
self->empty=0;
values=(char**)grib_context_malloc_clear(c,size*sizeof(char*));
if (!values) {
grib_context_log(c,GRIB_LOG_FATAL,"unable to allocate %d bytes",(int)size);
@ -340,9 +351,11 @@ static void dump_string(grib_dumper* d,grib_accessor* a,const char* comment)
return;
}
if (!self->begin) fprintf(self->dumper.out,",\n");
if (self->begin==0 && self->empty==0) fprintf(self->dumper.out,",\n");
else self->begin=0;
self->empty=0;
err = grib_unpack_string(a,value,&size);
p=value;
@ -374,16 +387,18 @@ static void dump_section(grib_dumper* d,grib_accessor* a,grib_block_of_accessors
) {
fprintf(self->dumper.out,"{\n");
self->begin=1;
self->empty=1;
grib_dump_accessors_block(d,block);
fprintf(self->dumper.out,"\n}\n");
} else if (!grib_inline_strcmp(a->name,"groupNumber")) {
depth+=2;
fprintf(self->dumper.out,",\n");
if (!self->empty) fprintf(self->dumper.out,",\n");
fprintf(self->dumper.out,"%-*s",depth," ");
fprintf(self->dumper.out,"\"group%d\" : {",(int)a->bufr_group_number);
fprintf(self->dumper.out,"\n");
/* fprintf(self->dumper.out,"%-*s",depth," "); */
self->begin=1;
self->empty=1;
grib_dump_accessors_block(d,block);
fprintf(self->dumper.out,"\n");
fprintf(self->dumper.out,"%-*s",depth," ");

View File

@ -1,5 +1,5 @@
TESTS = definitions.sh calendar.sh \
bufrdc_desc_ref.sh bufrdc_ref.sh bufr_dump.sh \
bufrdc_desc_ref.sh bufrdc_ref.sh bufr_dump.sh bufr_json.sh\
ieee.sh grib1to2.sh \
unit_tests.sh \
grib2to1.sh badgrib.sh ls.sh filter.sh \

30
tests/bufr_json.sh Executable file
View File

@ -0,0 +1,30 @@
#!/bin/sh
# Copyright 2005-2015 ECMWF.
#
# This software is licensed under the terms of the Apache Licence Version 2.0
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
#
# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
#
set -e
. ./include.sh
REDIRECT=/dev/null
for file in ${data_dir}/bufr/*.bufr
do
rm -f ${file}.json | true
${tools_dir}bufr_dump -j $file 2> $REDIRECT > ${file}.json
json_xs < ${file}.json >$REDIRECT 2> $REDIRECT
rm -f ${file}.json
done