Python:Json到对象,忽略某些字符
目前,我正在使用namedtuple类将json转换为Python对象。这样,我可以轻松地为printjson.some_json_变量选择数据。但是,我的Json包含以下键:@odata.context,当然,这不能用作变量名,因为它包含@和 目前,我正在使用json.loadjson函数来加载json。然后我将@odata.context键重命名为odataContext,这样它就不再包含@和。。接下来,我使用json.dumpsjson将json转换为字符串,然后使用json.loadsjson函数将其转换为对象。正如你所理解的,这种方法并不是很有效 def load_jsoninput_json: 使用openinput_json,“r”作为l_json: data=json.loadl\u json 数据[odataContext]=数据。pop@odata.context data=json.dumpsdata data=json.loadsdata,object_hook=lambda d:namedtuple'data',d.keys*d.valuesPython:Json到对象,忽略某些字符,python,json,odata,namedtuple,Python,Json,Odata,Namedtuple,目前,我正在使用namedtuple类将json转换为Python对象。这样,我可以轻松地为printjson.some_json_变量选择数据。但是,我的Json包含以下键:@odata.context,当然,这不能用作变量名,因为它包含@和 目前,我正在使用json.loadjson函数来加载json。然后我将@odata.context键重命名为odataContext,这样它就不再包含@和。。接下来,我使用json.dumpsjson将json转换为字符串,然后使用json.loadsj
有没有什么方法可以更有效地做到这一点?我认为最多可以使用2个函数,但我不知道如何实现。我认为最简单的方法是在将@odata.context加载到JSON之前,用odataContext替换@odata.context。尝试以下方法:
def load_json(input_json):
with open(input_json, 'r') as l_json:
data = l_json.read().replace("@odata.context", "odataContext")
data = json.loads(data, object_hook=lambda d: namedtuple('data', d.keys())(*d.values()))
可以替换对象_hook=参数lambda中不需要的字符:
json_data = '''{
"@odata.context": 1,
"variable": "Hello"
}'''
import json
from collections import namedtuple
def load_json(input_json):
data = json.loads(input_json, object_hook=lambda d: namedtuple('data', (k.replace('@', '').replace('.', '_') for k in d.keys()) )(*d.values()))
return data
data = load_json(json_data)
print(data.odata_context)
print(data.variable)
印刷品:
1
Hello