class RawJson(str):
    pass
for name in ['encode_basestring', 'encode_basestring_ascii']:

    def encode(o, _encode=getattr(json.encoder, name)):
        return o if isinstance(o, RawJson) else _encode(o)
setattr(json.encoder, name, encode)
print(json.dumps([1, RawJson('["abc", 2]'), '["def", 3]']))
В Python json не должен экранировать строку