I'm reading JSON output from an input file, and extracting values.
Many of the fields are meant to be numerical, however, some fields are wrapped
in a "floatApprox" dict, which messed with my parsing.
For example:
{
"hostname": "example.com",
"version": "3.0.5",
"pid": {
"floatApprox": 18403
}
"network": {
"bytesIn": 123123,
"bytesOut": {
"floatApprox": 213123123
}
}
The floatApprox wrapping appears to happen sporadically in the input.
I'd like to find a way to deal with this robustly.
For example, I have the following function:
def strip_floatApprox_wrapping(field):
# Extracts a integer value from a field. Workaround for the float_approx
wrapping.
try:
return int(field)
except TypeError:
return int(field['floatApprox'])
which I can then call on each field I want to extract.
However, this relies on casting to int, which will only work for ints - for
some fields, they may actually be floats, and I'd like to preserve that if
possible.
(I know there's a isnumber() field - but you can only call that on a string -
so if I do hit a floatApprox field, it will trigger a AttributeError exception,
which seems a bit clunky to handle).
def strip_floatApprox_wrapping(field):
# Extracts a integer value from a field. Workaround for the float_approx
wrapping.
try:
if field.isnumeric():
return field
except AttributeError:
return field['floatApprox']
Is there a way to re-write strip_floatApprox_wrapping to handle both
ints/floats, and preserve the original format?
Or is there a more elegant way to deal with the arbitrary nesting with
floatApprox?
--
https://mail.python.org/mailman/listinfo/python-list