On Mon, Feb 22, 2021 at 06:47:30PM +0100, Paolo Bonzini wrote: > On 22/02/21 16:24, Daniel P. Berrangé wrote: > > This problem isn't unique to QEMU. Any app using JSON from the > > shell will have the tedium of quote escaping. JSON is incredibly > > widespread and no other apps felt it neccessary to introduce single > > quoting support, because the benefit doesn't outweigh the interop > > problem it introduces. > > The quotes were introduced for C code (and especially qtest), not for the > shell. We have something like > > response = qmp("{ 'execute': 'qom-get', 'arguments': { 'path': %s, " > "'property': 'temperature' } }", id); > > These are sent to QEMU as double-quoted strings (the single-quoted JSON is > parsed to get interpolation and printed back; commit 563890c7c7, "libqtest: > escape strings in QMP commands, fix leak", 2014-07-01). However, doing the > interpolation requires a parser that recognizes the single-quoted strings. IMHO this is the wrong solution to the problem. Consider the equivalent libvirt code that uses a standard JSON library underneath and has a high level API to serialize args into the command qemuMonitorJSONMakeCommand("qom-get", "s:path", id, "s:property", "temperature"); Of course this example is reasonably easy since it is a flat set of arguments. Nested args get slightly more complicated, but still always preferrable to doing string interpolation IMHO. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|