Search code examples
pythonshellescapingargv

Transform JSON String to Dictionary using shell without escape


I am calling a python script from the shell, with one input argument.

python main.py """{"key1":"value1", "key2":"value2"}"""

All keys and values are strings. Once in python, I would like to convert the JSON string to a dictionary, so I have acess to the values by using the keys.

I tried the following

import json
import sys
dict_in = json.loads(sys.argv[1])

But dict_in would end up a string like that {key1:value1, key2:value2} So it seems like I need to find a way to pass the string with quotation marks from the shell to python. I can not use escape characters since the string is provided by a different program.

Is there an elegant way to solve this?


Solution

  • I've found a python 2 module which can handle such cases.

    Suppose you have this string:

    >>> str = '{foo: bar, id: 23}'
    

    Then you can use yaml as follows:

    >>> import yaml
    >>> dict = yaml.load(str)
    >>> dict
    {'foo': 'bar', 'id': 23}
    
    >>> dict['foo']
    'bar'
    

    Now you have what you needed.

    More info (and also python 3 support and etc.) can be found here: https://pyyaml.org/wiki/PyYAMLDocumentation