J'ai un dictionnaire en Python que je voudrais sérialiser en JSON et convertir en une chaîne C appropriée pour qu'il contienne une chaîne JSON valide qui correspond à mon dictionnaire d'entrée. J'utilise le résultat pour générer automatiquement une ligne dans un fichier source C. Je l'ai? Voici un exemple:en utilisant Python pour générer un littéral de chaîne C de JSON
>>> import json
>>> mydict = {'a':1, 'b': 'a string with "quotes" and \t and \\backslashes'}
>>> json.dumps(mydict)
'{"a": 1, "b": "a string with \\"quotes\\" and \\t and \\\\backslashes"}'
>>> print(json.dumps(mydict))
{"a": 1, "b": "a string with \"quotes\" and \t and \\backslashes"}
Ce que je dois générer est la chaîne C suivant:
"{\"a\": 1, \"b\": \"a string with \\\"quotes\\\" and \\t and \\\\backslashes\"}"
En d'autres termes, je dois échapper à la barre oblique inverse et guillemet sur le résultat de l'appel JSON. décharges (mydict). Au moins, je pense que je fais ... Est-ce que ce qui suit fonctionnera? Ou est-ce que je manque un cas d'angle évident?
>>> s = '"'+json.dumps(mydict).replace('\\','\\\\').replace('"','\\"')+'"'
>>> print s
"{\"a\": 1, \"b\": \"a string with \\\"quotes\\\" and \\t and \\\\backslashes\"}"
Vous ne voulez pas définir un dictionnaire en C. Vous voulez une chaîne syntaxique C qui pourrait être analysée pour générer votre dictionnaire? Pourquoi ne pas finesse l'ensemble du problème en stockant le résultat dans un fichier et en chargeant le fichier lors de l'exécution? Alors vous n'avez pas à échapper à des trucs. – hughdbrown
Je ne l'analyse pas en C. C'est un système embarqué où je transmets la chaîne verbatim à un PC, où la chaîne est analysée. –
... et en fait ça va mieux, c'est aussi pour une directive DWARF qui cache la chaîne dans un fichier symbole. Je ne peux pas le faire en cours d'exécution; il n'y a pas de système de fichiers accessible à mon système embarqué. –