可能是一个常见问题,但是我是python新手!
我正在研究一些处理json查询的库,并问自己是否有一些最佳实践来避免对大量json键进行硬编码,例如:
F
当我看到它时,它不喜欢我,我创建了一个具有如下常量的类:
# just an example..
var1 = response.json()["ACRI"]["message"]["title"]
var2 = response.json()["ACRI"]["message"]["content"]
var3 = response.json()["ACRI"]["message"]["meta"]["timestamp"]
这是一个好习惯吗?关于python编译器,我是否不了解?
谢谢
编辑:我正面临着性能和/或内存消耗的最佳实践
答案 0 :(得分:1)
性能应该您最不用担心,可维护性更重要。为字符串使用符号名的一个很好的理由是,您不能轻易地键入它,例如c.f。
KEY_SYMBOLS = "Symbols"
foo[KEY_SYMOBLS]
vs
foo["Symobls"]
IDE或linter甚至可以在运行代码之前找到前一种错字并突出显示它,但不太可能是后者。
在性能方面,性能最高的Python代码是不会在字符串中存储字符串的代码。编译后,将同一模块中相同字符串的不同用法合并为仅引用一个字符串常量:
>>> 'foo' is 'foo'
True
尽管如此,Chepner的答案仍然是:您不必从根本上解决子词典。
答案 1 :(得分:1)
您的初始策略非常适合Zen of Python。它具有很高的可读性,使用Python的任何人都会立即理解它。但是,您的第二个示例过于复杂,难以理解。
也就是说,可以用parse json so that it becomes an object with attributes代替带键的字典。您的代码将如下所示:
render() {
return(
<div style={{ width: 500 }}>
<Document
file={this.state.pdfData }
onLoadSuccess={() => console.log("Success")}
onLoadError = {(error) => console.log(error.message)}
>
<Page pageNumber={1} />
</Document>
</div>
);
}
或者,define a simple class会照顾它:
export const getData = id => async (dispatch) => {
let response;
try {
response = API_CALL
console.log(response) // PDF raw data printed
let rawLength = response.length;
let array = new Uint8Array(new ArrayBuffer(rawLength));
for (let i=0; i < rawLength; i++){
array[i] = response.charCodeAt(i);
}
console.log(array); //array value printed
return array;
} catch (error) {
dispatch(setError(error.message));
throw error;
}
};
答案 2 :(得分:0)
每个嵌套的dict是可以存储其引用的dict。
resp = response.json()["ACRI"]["message"]
var1 = resp["title"]
var2 = resp["content"]
var3 = resp["meta"]["timestamp"]
答案 3 :(得分:0)
如果从文件中读取 JSON 数据,请使用以下代码片段。
with open("config.json") as json_data_file:
json_text = json_data_file.read()
json_data = json.loads(json_text, object_hook=lambda d: namedtuple('X', d.keys())(*d.values()))
# Access data using below format
var1 = json_data.key1.subkey1
var2 = json_data.key2.subkey2