猫史档案馆


[每喵ug] 神奇的json stringify

用户:伴雪纷飞伴雪纷飞查看:2 回复:5 评论:2 创建时间:2023-01-08T11:44:39


console.clear()
db.sql`CREATE TABLE IF NOT EXISTS playerstate (
        userKey CHAR(16) NOT NULL,
        state MEDIUMTEXT NOT NULL--超长的字符串类型MEDIUMTEXT
    )`;//创建表
async function save(entity) {
    if (!entity.player.userKey)return;
    await db.sql`
        INSERT INTO playerstate (userKey,state) --给表添加两个值
        VALUES(${entity.player.userKey},${JSON.stringify(entity)})--将玩家实体对象转换为字符串
        ON CONFLICT(userKey) --当存在时
        DO UPDATE --更新字符串
        SET state=excluded.state,--使用固定名称的“表” excluded
    ` 
}
async function load(entity){
    const info = (await (db.sql`SELECT * FROM playerstate WHERE userKey=${entity.player.userKey} limit 1`))[0]
    if(!info)return null;
    entity=JSON.parse(info)
    return entity
}
async function allPlayerList(){//调用这个函数
    const dict = await db.sql`SELECT * FROM playerstate`
    return dict.map(d => JSON.parse(d.state))
}
world.onPlayerJoin(({entity})=>{load(entity)})
world.onPlayerLeave(({entity})=>{save(entity)})
world.onPress(({ button, entity }) => {button==Box3ButtonType.ACTION1?save(entity):0})

原本我要写一个万能sql代码a

能记录下玩家的全部状态( )

这样就再也不担心sql问题了

但如你所见( )又遇到了一个从未见过的bug ( 恼

报错信息:

typeerror:Converting circular structure to JSON
    --> starting at object with constructor 'Box3Entity'
    |     property 'player' -> object with constructor 'Box喵layer'
    --- property 'cameraEntity' closes the circle

报错行:

        VALUES(${entity.player.userKey},${JSON.stringify(entity)})--将玩家实体对象转换为字符串

 


回复

上一页1 页 / 共 1下一页
星星上的雪花星星上的雪花

我上岛这么久,第一次见有人要JSON.stringify(entity)的

点赞1


评论


青空冰海青空冰海

简单说就是对象中存在循环调用

因为entity.player.cameraEntity指向的是一个实体对象,而这个对象也包含entity.player.cameraEntity键,这样就会套娃,所以就报错啦

存几个要保持的属性就好了

点赞2


评论


爱探险的可乐呀爱探险的可乐呀

百度就有循环调用解决方法。直接去搜就好了。

点赞0


评论


yee089yee089

首先,请自主使用百度翻译,往往看懂意思问题就迎刃而解了。

什么?为什么不是谷歌翻译?谷歌翻译没有力(恼)

点赞0


评论


KO轩awaKO轩awa

typeerror:将循环结构转换为JSON

-->从具有构造函数“Box3Entity”的对象开始

|属性“player”->具有构造函数“Box喵layer”的对象

---属性“cameraEntity”关闭圆

点赞0


评论