Json对象导出到python中的环境变量,返回不带“”的字符串

cigdeys3  于 2023-01-12  发布在  Python
关注(0)|答案(3)|浏览(125)

我正在使用python创建一个CDK堆栈。这里我将json对象导出到linux环境中,因为这是一个clodebuild步骤。

f"export SHARED=\"{json.dumps(shared)}\""

使用\"的唯一原因是我在json对象中得到了一个空格错误。
当我尝试导入环境对象并将其作为json加载时,我得到的json对象没有""

{
    mts:{
        account_id:11111,
        workbench:aaaaa,
        prefix:rad600-ars-sil,rad600-srr-sil-stage1,rad600-srr-sil-stage2
    },
    tsf:{
        account_id:22222,
        workbench:bbbbb,
        prefix:yyyy

    }
}

使用下面的对象时,加载不工作,并发出错误,状态为json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes

SHARED = json.loads(os.environ["SHARED"])

我是否遗漏了什么或者有更好的方法将json对象作为环境变量发送?

uxhixvfz

uxhixvfz1#

使用64进制

一个简单的方法是首先将json字符串编码为base64。

import base64
json_bytestring = bytes(json.dumps(shared), 'utf-8')
b64_string = str(base64.b64encode(json_bytestring), 'utf-8')

command = f'export SHARED="{b64_string}"'
# ...

然后在另一端:

shared_b64 = os.environ['SHARED']
shared_bytestring = base64.b64decode(shared_b64)
SHARED = json.loads(str(shared_bytestring, 'utf-8'))

此技术也适用于任意二进制数据。

使用shlex.引号

另一种方法是使用shlex.quote为shell命令正确地引用json字符串。

command = f'export SHARED={shlex.quote(json.dumps(shared))}'
sxpgvts3

sxpgvts32#

这很傻,但这起作用了。
我不太清楚它内部是怎么运作的

f"export SHARED=\"{json.dumps(shared)}\""

f"export SHARED=\'{json.dumps(shared)}\'"

成功了!
我觉得在访问变量os.environ["SHARED"]时,它使""无效,因为整个对象本身包含"",通过添加',该对象周围包含",它能够更好地区分。
只是一个理论!!!

3xiyfsfu

3xiyfsfu3#

# Dump the JSON object to a string, with ASCII encoding and double quotes for keys
shared_str = json.dumps(shared, ensure_ascii=True)

# Set the environment variable
os.environ["SHARED"] = shared_str

# Load the environment variable and parse it as JSON
SHARED = json.loads(os.environ["SHARED"])

相关问题