異なる値を持つ 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 を使用して後で値をエスケープすることもできません。