0

異なる値を持つ JSON 文字列を受け取った場合、二重引用符をエスケープしたいと考えています。特定のフィールドの値をループしたい場合は最初に json.loads(string) が必要なため、これは機能しませんが、値の1つに誤解を招く二重引用符があるため、これはすでに失敗しています。生の文字列をループすると、正しく設定されている二重引用符もエスケープされ、再び失敗します。値をループするだけでどのように達成できますか?

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(string) 経由で json としてロードせずにエスケープするとどうなりますか

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

これが発生することは明らかですが、json.loads は正しい json 文字列を認識しないため (値 3 が壊れているため)、この文字列を json.loads 経由でロードすることも、json.loads を使用して後で値をエスケープすることもできません。

4

0 に答える 0