使用json.loads python在cgi.FieldStorage()中转义双引号

时间:2013-11-10 15:27:30

标签: python json encoding cgi

如果我收到一个具有不同值的JSON字符串,我想要转义双引号。 这不起作用,因为如果我想循环遍历给定字段的值,我首先需要json.loads(字符串),但这已经失败,因为它们是其中一个值中的误导性双引号。 如果我遍历原始字符串,它会转义正确设置的双引号,并再次失败。 如何才能完成循环值?

print("Test started...")
try:
    import json
    import cgi
    form3 = cgi.FieldStorage()
    print("cgi Fieldstorage loaded in form3...")

    form2 = form3["json"].value
    print("form 2 is now form3.value...")


    print("loop now starting...")
    for x in form2:
        print("in loop...")

        x = x.replace('"','\"')
        print("dumped an item in form1...")

    form1 = json.loads(form2)
    print("form1 is being prepared with json.loads... ")

    print("dumped form1 string looks like : " + json.dumps(form1))

# handeling JSON-Exceptions thrown by corrupted parameters
except (ValueError, KeyError):
    import sys
    print("Encoding Error")
    sys.exit()

来自地址栏的示例输入:

http://localhost/script.py?json={"field":"value","field2":"value","field3":"val"ue"}

请注意,字段3中的值应按以下方式转义:

http://localhost/script.py?json={"field":"value","field2":"value","field3":"val\"ue"}

如果字符串被转义而未通过json.loads(字符串)将其作为json加载,会发生什么?

http://localhost/script.py?json={\"field\":\"value\",\"field2\":\"value\",\"field3\":\"val\"ue\"}
很明显,这种情况发生了,但是这个字符串不能再通过json.loads加载了 我也不能json.loads然后转义值,因为json.loads将无法识别正确的json字符串(value3已损坏)

0 个答案:

没有答案