将一个字典追加到另一个字典中,并解析为JSON格式。

1 人不认可

我正在开发一个函数,获得一个字符串的字典,我需要追加到另一个字典。之后,我需要把它像JSON一样解析,以做一个post请求。我的问题是,我不能正确地解析,最后的JSON没有嵌套的字典。这个函数是这样的。

def namefunction(field_string):
    dfield01 = "1234567890"
    dfield02 = "abcdefgh"
    headers = { 'content-type': 'application/json', 'Accept-Charset': 'UTF-8' }
    endpoint = "https://url.to.endpoint"
    dataSend= { "dfield01": dfield01, "dfield02": dfield02 }
    dataSend["field_string"] = json.loads(field_string)
    r = request.post(url=endpoint, data=json.dumps(dataSend), headers=headers)
    return HttpResponse(r, mimetype='aplication/javascript')

我在这个函数中得到的字符串是这样的。

field_string = '{"0":"whatever 000","1":"whatever 001\nwhatever001b","2":"whatever 002\nwhatever 002b"}'

我使用的是Python2.7(我无法改变)。

#### 2019-09-17更新

谢谢你的建议 @alex。我用 json.loads() 做了一个类似的方法,但是当我试图把输出放在另一个字典里时,第一个字典就失去了他的格式。我试着用一个例子来解释。

With this...

# the same -> field = json.loads(field_string)
field = ast.literal_eval(field_string)
return HttpResponse(field, mimetype='application/javascript')

我在输出中得到一个JSON格式,但如果我这样做 ...

data = { "name_field": json.loads(field_string) }

... or this:

data = { "name_field": ast.literal_eval(field_string) }

当我检查数据输出时,我得到一个字符串的值。我做错了什么?

请问有什么线索吗?

5 个评论
field_string 既不是有效的JSON,也不是dict的字符串表示。它缺少括号。这就是你需要解决的问题。
SLR
谢谢你@alex的建议。我将用更多的信息更新答案。
你的 field_string 缺少 {} ,如果你希望它被评估为一个dict。
SLR
你好@Grisma。是的,你是对的,没有{}我们就不能得到字典。我在例子中误导了他们,但实际上我在字符串中有{}。有了括号后,行为就像上面解释的那样。我将在例子中更新这一点。
python
json
SLR
SLR
发布于 2019-09-16
1 个回答
Grismar
Grismar
发布于 2019-09-18
已采纳
0 人赞同

这是一个很好的例子,说明为什么提供实际再现问题的示例代码会是一个更好的方法。

When using your code:

import json
field_string = '{"0":"whatever 000","1":"whatever 001\nwhatever001b","2":"whatever 002\nwhatever 002b"}'
data = { "name_field": json.loads(field_string) }

产生一个错误,你的代码不会运行。【替换代码1

运行后,单字母变化(field_string是一个原始字符串)。

import json