在Python中插入JSON对象作为参数(转义引号)

2024-09-27 09:26:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将一个JSON对象作为参数传递给python2脚本,它可以工作,但是最终的JSON数据有一个单引号(')括住对象。你知道吗

下面是我的代码

import json
import sys
print sys.argv[1]
data_str = sys.argv[1].decode('string-escape')

print data_str
# The above print's fine with no single quotes

json_data= {
    "server-name": "servername",
    "transaction-id": "transaction_id",
    "user-id": "user_id",
    "change-id": "change_id",
    "consumer-name": "consumer_name",
    "platform": "platform",
    "cookbooks": [
        {
            "cookbook-name": "cookbook_name",
            "cookbook-version": "cookbook_version",
            "recipe-name": "receipie_name",
            "attributes": {

            }
        }
                ]
            }
json_data["cookbooks"][0]["attributes"] = data_str.decode('string-escape')

print json_data["cookbooks"]

Execution

C:\Python26\python.exe saver.py "{apple:newf,mango:newb}" 
 {apple:newf,mango:newb} 
{apple:newf,mango:newb} 
[{'cookbook-name': 'cookbook_name', 'cookbook-version': 'cookbook_version', 'recipe-name': 'receipie_name', 'attributes': '{apple:newf,mango:newb}'}]

从上面的输出中,最终的json\u数据在属性值中包含引号 '属性':'{苹果:newf,芒果:新手}'这导致GET调用出错。 如何避开这句话?


Tags: nameidjsonappledataversionsysattributes
2条回答

如果您想使用JSON,那么使用Python中内置的json模块。不要试图通过将其视为Python字符串数据来回避这个问题

import json

然后:

json_data["cookbooks"][0]["attributes"] = json.loads(sys.argv[1])

然后,如果要将Python数据结构输出为json:

print(json.dumps(json_data["cookbook"]))

如果我错了,请原谅,但我认为您已经混淆了转换参数字符串类型和解码json字符串。你知道吗

结果中的单引号表示整个值是一个字符串。你知道吗

首先,您在命令行中传递的参数不是有效的JSON。你知道吗

尝试这样启动程序:

C:\Python26\python.exe saver.py "{\"apple\":\"newf\",\"mango\":\"newb\"}"

然后,对字符串中包含的JSON进行如下解码:

json_data["cookbooks"][0]["attributes"] = json.loads(data_str)

即。json.loads文件而不是str.解码你知道吗

此时变量“json\u data”并没有保存json,而是保存了一个字典

然后,您必须对整个json数据进行编码,以某种原始的httpget形式传递它,除非您有一些API为您进行编码。像这样的

encoded_json_data = json.dumps(json_data)

相关问题 更多 >

    热门问题