我想要做的基本上是重新格式化一個字串并讓它通過 jsonschema 驗證函式。
從表面上看很簡單。然而,棘手的部分是字串是從檔案中讀取的,并且它的外觀和格式可能會有所不同。
例子是
{
key:"value",
...
}
或者
{
"key":'value'
,...
}
或者單引號、雙引號、無引號、陣列、字串等的任何可能組合,并且可能包含撇號等。
我想對正則運算式規則足夠自由,并將輸入資料視為非結構化資料,將運行時傳遞的代碼格式化為統一的,以檢查其質量。
使用 python,到目前為止,我的方法是嘗試并迭代我希望執行的最常見的轉換 - 但是,我知道我想要做的事情是可以實作的,可能非常明顯,即使我還沒有完成它,我想我會盡量避免頭痛并尋求幫助。
我有一個更徹底的例子是here(嘗試演示我迄今為止發現的大部分問題):
{
key_a:'my value',
key_b:"my other value"
,nested_value_a:{
sub_a: "value a",
'sub_b':'value b',
"sub_c":'isn't value b very interesting'
}
,key_c:{
sub_d: ["value"],
sub_e: ["value"]
},
}
我想要的輸出:
{
"key_a":"my value",
"key_b":"my other value"
,"nested_value_a":{
"sub_a": "value a",
"sub_b":"value b",
"sub_c":"isn\"t value b very interesting"
}
,"key_c":{
"sub_d": ["value"],
"sub_e": ["value"]
}
}
我已經嘗試過這是我的第一步 - 但我確信我會以艱難的方式解決這個問題。我想嘗試結合負面的前瞻和后瞻,所以我可以將所有單引號全域換成雙引號,避免單引號夾在兩個字母之間的情況 - 但我認為我不夠聰明它是我自己的。非常感謝所有幫助。
謝謝
uj5u.com熱心網友回復:
在考慮字串時,您對“不是”這個詞有一點問題
f = """{
key_a:'my value',
key_b:"my other value"
,nested_value_a:{
sub_a: "value a",
'sub_b':'value b',
"sub_c":'isn't value b very interesting'
}
,key_c:{
sub_d: ["value"],
sub_e: ["value"]
}
}"""
現在,您可以這樣做:
f = f.replace("\'","\"")
f = f.replace("\"t","\\'t")
print(f)
這將產生這個字串
f= {
key_a:"my value",
key_b:"my other value"
,nested_value_a:{
sub_a: "value a",
"sub_b":"value b",
"sub_c":"isn\\'t value b very interesting"
}
,key_c:{
sub_d: ["value"],
sub_e: ["value"]
}
}
不,最美的東西。在此之后,您只需執行以下操作(您需要 import dirtyjson):
import dirtyjson
d = dirtyjson.loads(f)
json = json.dumps(d, sort_keys=False)
這給了你
{"key_a": "my value", "key_b": "my other value", "nested_value_a": {"sub_a": "value a", "sub_b": "value b", "sub_c": "isn't value b very interesting"}, "key_c": {"sub_d": ["value"], "sub_e": ["value"]}}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/417385.html
標籤:
上一篇:決議int和或字串
