我有許多 JSON 回應,如下所示
{
"response": {
"list": [
{
"key1": "val1",
"key2": "val2"
},
{
"key3": "val3",
"key4": ""
}
],
"data": {
"key5": "val5",
"key6": "",
"key7": "val7"
},
"key8": "val8",
"key9": "val9",
"key10": "",
"key10": "val10"
}
}
一些 JSON 回應可能是完全不同的結構。有些可能有更多的內部串列和字典,有些可能是一個簡單的平面 json,我需要用 Null/None 值替換所有空字串 ("")。我不確定如何在替換值時遍歷未知的 JSON。
任何幫助,將不勝感激
uj5u.com熱心網友回復:
最簡單的解決方案是使用Python jqbindings,它允許您撰寫一個簡短的過濾器來在解碼之前處理 JSON。
response = '''{
"response": {
"list": [
{
"key1": "val1",
"key2": "val2"
},
{
"key3": "val3",
"key4": ""
}
],
"data": {
"key5": "val5",
"key6": "",
"key7": "val7"
},
"key8": "val8",
"key9": "val9",
"key10": "",
"key10": "val10"
}
}'''
>>> jq.all('walk(select(.=="")|=null)', text=response)[0]
{'response': {'list': [{'key1': 'val1', 'key2': 'val2'}, {'key3': 'val3', 'key4': None}], 'data': {'key5': 'val5', 'key6': None, 'key7': 'val7'}, 'key8': 'val8', 'key9': 'val9', 'key10': 'val10'}}
uj5u.com熱心網友回復:
沒有庫的最簡單方法是創建和使用遞回函式:
def replace_blanks(o):
if isinstance(o, dict):
return {k: replace_blanks(v) for k, v in o.items()}
if isinstance(o, list):
return [replace_blanks(elem) for elem in o]
return None if o == '' else o
用法:
from pprint import pprint
d = {
"response": {
"list": [
{
"key1": "val1",
"key2": "val2"
},
{
"key3": "val3",
"key4": ""
}
],
"data": {
"key5": "val5",
"key6": "",
"key7": "val7"
},
"key8": "val8",
"key9": "val9",
"key10": "",
"key10": "val10"
}
}
pprint(replace_blanks(d))
印刷:
{'response': {'data': {'key5': 'val5', 'key6': None, 'key7': 'val7'},
'key10': 'val10',
'key8': 'val8',
'key9': 'val9',
'list': [{'key1': 'val1', 'key2': 'val2'},
{'key3': 'val3', 'key4': None}]}}
如果您的資料是 JSON 字串并且您正嘗試將其加載到 Python 物件,您還可以將object_hook引數傳遞給json.loads:
json_string = """
{"response": {"list": [{"key1": "val1", "key2": "val2"}, {"key3": "val3", "key4": ""}],
"data": {"key5": "val5", "key6": "", "key7": "val7"},
"key8": "val8", "key9": "val9", "key10": "val10"}}
"""
data = json.loads(json_string, object_hook=replace_blanks)
pprint(data)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/330663.html
上一篇:創建按“組”分組的最短距離字典?
