levelDB的数据查看(非常详细)
起因:.net大作业天气预报程序(WPF)答辩时,老师问怎么维持数据持久性的,启动时加载的数据存在哪里,我明白老师想考的应该是json文件的解析(正反),半天没答上来存那个文件了(老师默认这个文件是自己建的),回头我发现用的模仿浏览器localstorage 的
Blazored.LocalStorage服务(底层基于levelDB键值存储系统)管理数据,全交出去了根本没管这个,而且存储形式时键值对(最后得到的其实是levelDB数据库文件),那么应该怎样看这个文件夹里的真实数据呢,得通过其他工具,我这里用的是LevelDBViewer.jar
工具:LevelDBViewer.jar(没jdk的先装jdk才能用)
https://github.com/SuperMarcus/LevelDBViewer/releases/tag/v1.0
然后运行(要么在你放这个jar包的文件夹里打开cmd, 要么就用绝对地址哈,有的不行的可能得管理员运行cmd)
# 或者双击jar包
java -jar LevelDBViewer.jar
界面:
打开leveldb文件夹,比较难找直接把路径复制过来就行了
在哪里找leveldb文件夹:如图 C:/用户名/AppData/Local/你的项目名/.....
打开后出现(大概意思是最多打开多少个文件,这个文件夹里可能有很多文件,我也不太明白,直接continue)
变成这样
随便点一条左边的,String就是json字符串(但是编码是unicode,尤其是中文),Hex是底层16进制数表示
所以还得解码让json字符串变成我们能看懂的。
解码:把这一串json字符串处理成我们能看懂的
import jsondef decode_and_pretty_print(json_str):try:# 解码JSON字符串data = json.loads(json_str)# 以易读格式输出print(json.dumps(data, ensure_ascii=False, indent=2))except json.JSONDecodeError:print("输入的不是有效的JSON字符串")except Exception as e:print(f"发生错误: {e}")if __name__ == "__main__":# 要处理的JSON字符串json_str = r'{"Name":"\u957F\u6625\u5E02","Info":"\u5409\u6797\u7701 \u957F\u6625\u5E02","Lat":43.816996,"Lon":125.323643}'decode_and_pretty_print(json_str)
结果:其实就是为了维持数据持久性中当前位置存储的数据(这还是json格式哈,实际上在存储时虽然是以键值对的方式存储,但是值是json字符串)
{"Name": "长春市","Info": "吉林省 长春市","Lat": 43.816996,"Lon": 125.323643
}