loss of precision caused by json
Closed this issue · 6 comments
Hi,
After I write a value e.g. 1.10
to the tag Exif:UserComment
and read it by pyExifTool using method involving json (exiftoolhelper.get_tags()), the return value becomes 1.1
, the precision just lost. (1.10
means 10th January for me, not equal to 1.1
.)
According to exiftool doc:
exiftool OPTIONS
ExifTool quotes JSON values only if they don't look like numbers (regardless of the original storage format or the relevant metadata specification).
Additionally, the original outputs of exiftool do keep zeros at the end:
[{
"SourceFile": "./test.jpg",
"UserComment": 1.10
}]
So, I guess parse float as str is nessary. And the fellowing code could fix the problem:
//exiftool.py line 1159
parsed = json.loads(result, parse_float=str)
I think It's a good idea to add a option to let users to parse float as str without modifing the lib of pyexiftool.
@Yang-z nice catch, that is definitely a bug. Let me write a test case for this and then update the change and push out a new release.
That's a weird bug, thanks for also suggesting the fix
🤔 I think there could be all types of bugs coming from that. like if UserComment was 0003
or something...
FYI: I'm writing tests and trying to think of an elegant way to implement this... might just have to be giving users an option. It's very funky behavior actually... I really wish the JSON adhered to the tag type
So I forsee a problem... I may have to remove this code which supports ujson
, since the ujson
library does not take in the parameters of the built-in json
library
pyexiftool/exiftool/exiftool.py
Lines 48 to 54 in 7c59336
Assuming I pull out the json.loads
call or make an adjustment to params passed to it, I would have to drop support for ujson
to address this issue
Let me think more about how to solve this without breaking too much compatibility... in theory, by removing direct (seamelss) support to ujson
, I might be able to effectively enable usage of other libraries like simplejson
or orjson
in the API
@Yang-z thanks for reporting this bug... I think there's other quirky undocumented behavior with exiftool that might end up being bugs. I wrote an FAQ for set_json_loads that you can use to address this issue