找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 216|回复: 2

[经验] 优雅地使用json文件

[复制链接]
发表于 2024-12-25 23:10:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
某天,我心血来潮,想在json文件中存储大量数据
众所周知,renpy自带了JSONDB
以下是文档地址:
https://doc.renpy.cn/zh-CN/python.html#jsondb
其用法如下:
[RenPy] 纯文本查看 复制代码
 class JSONDB(filename, default=None) link

我个人觉得非常不好用,或许是我自己太笨,在论坛也没有找到类似的教程
于是我打算用另一种办法:
在python中使用renpy.input("data.json")打开json文件,再使用json.loads,于是乎
map_data.json:
[RenPy] 纯文本查看 复制代码
{
    "locations": {
        "map": {
            "text": "家",[mw_shl_code=renpy,true]init python:
    import json

    # 加载 JSON 文件的函数
    def load_json(file_path):
        with renpy.open_file(file_path, encoding="utf-8") as f:
            return json.load(f)



# 使用 `default` 声明全局可存储变量
default location_data = load_json( "json/map_data.json")["locations"]

label start:
    # 访问并显示 JSON 数据中的键值
    $ home_text = location_data["map"]["text"]
    "Home Text: [home_text]"

            "location": "x street",
            "person": true
        }
    }
}[/mw_shl_code]
script.rpy:

诶!好像还可以,接下来,进一步添加可以修改json中内容的功能:
[RenPy] 纯文本查看 复制代码
    # 修改 JSON 数据
    $ location_data["map"]["text"] = "家没了"
    $ home_text = location_data["map"]["text"]
    "Updated Home Text: [home_text]"



这个时候,你还可以遍历json,很简单,用python的办法:
[RenPy] 纯文本查看 复制代码
python:
        for key,value in location_data["map"].items():
            print(key,value)


优雅!(自认为)



发表于 2024-12-26 16:10:58 | 显示全部楼层
哇,这感觉变得更加麻烦了,不过确实是很不错的尝试()
在我不了解JSONDB的用法前,确实会想着用一些“歪门邪道”去导入json文件,但知道JSONDB后就能知道有多好用了
(在此补充一下文档中JSONDB部分的链接:https://doc.renpy.cn/zh-CN/python.html#JSONDB
比如说像这样的一个json文件,命名为test_list.json,可以将其放置到game文件夹下的任意位置里(使用JSONDB无需顾忌文件路径的问题,在game文件夹下的任意位置都可以直接读取到)
[RenPy] 纯文本查看 复制代码
{
    "test_list": [
        {
            "name": "test"
        }
    ]
}

之后,使用JSONDB,导入json文件
[RenPy] 纯文本查看 复制代码
## 读取json文件,将其实例化为JSONDB对象,作为默认值
define test_list_data = JSONDB("test_list.json", default=None)
## 读取json文件中的test_list数据,作为变量
default test_list_json = test_list_data['test_list']

之后,就可以将test_list_json作为普通列表进行使用了。
只需要两行代码)
回复 支持 抱歉

使用道具 举报

发表于 2024-12-27 00:04:25 | 显示全部楼层
既然被设计出来就肯定是有原因的。JSONDB的特性类似于持久化数据,但一般用于储存游戏的版本控制信息,一般不会进行更改
回复 支持 抱歉

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|RenPy中文空间 ( 苏ICP备17067825号|苏公网安备 32092302000068号 )

GMT+8, 2025-1-26 16:47 , Processed in 0.136555 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表