将具有特殊字符的 python 对象转换为 JSON 字符串对象

Turning python object with special character to JSON string object

我在堆栈溢出中查看了很多与此类问题相关的示例,但这些答案中的 none 对我的问题有效。我在一个变量中有一个字符串,其中包含转义单反斜杠字符“\”。我将该字符串变量连接到 JSON 字符串变量。然后在 json 字符串上执行 json.loads() 但我收到错误消息:

ValueError: Expecting , delimiter: line 1 column 41 (char 40)

这是我的代码:

import json 

# The string of pass_string is taken from a rest/api/content of a website
pass_string = "I am an \"Engineer\""
data = '{"data": {"test": 1, "hello": "' + pass_string + ' in this lifetime."}, "id": 4}'

json_data = json.loads(data)
print(json_data)

由于 pass_string 是从网站的 request.get() 函数中获取的,因此无法将其转换为原始字符串然后输入到我们的数据中,例如:

pass_string = r"I am an \"Engineer\""

以上确实有效,但我的字符串在变量内部传递 pass_string 所以我必须以某种方式修改变量内部的内容。尝试了很多来自堆栈溢出的示例,但 none 似乎适用于我的情况。

停止尝试手动创建 JSON 字符串。那是你的根本问题。使用 python 数据结构 然后 使用 json 模块.[=19 将其序列化为末尾的字符串=]

所以从这样的事情开始:

>>> import json
>>> data = {"data": {"test": 1, "hello": " in this lifetime."}, "id": 4}

然后简单地:

>>> pass_string = "I am an \"Engineer\""
>>> data['data']['hello'] = pass_string + data['data']['hello']
>>> print(data)
{'data': {'test': 1, 'hello': 'I am an "Engineer" in this lifetime.'}, 'id': 4}
>>> print(json.dumps(data))
{"data": {"test": 1, "hello": "I am an \"Engineer\" in this lifetime."}, "id": 4}

尽管如此,由于您将其作为 data 参数传递给 requests.put,因此您根本不必使用 json.dumps...清楚,我 认为 你实际上是从 JSON 字符串开始的,

data = '{"data": {"test": 1, "hello": " in this lifetime."}, "id": 4}'

所以你应该做的只是:

data = json.loads(data)
data['data']['hello'] = pass_string + data['data']['hello']

瞧瞧。你现在可以做 requests.put(url,data=data)

json.loads需要转义的字符串表示,所以需要转义转义:

import json 

pass_string = "I am an \"Engineer\"".replace('\"', '\"')
data = '{"data": {"test": 1, "hello": "' + pass_string + ' in this lifetime."}, "id": 4}'

json_data = json.loads(data)
print(json_data)

输出:

{'data': {'test': 1, 'hello': 'I am an "Engineer" in this lifetime.'}, 'id': 4}