gpt4 book ai didi

javascript - MySql:字符串变成对象?奇怪的行为

转载 作者:行者123 更新时间:2023-11-29 08:23:28 26 4
gpt4 key购买 nike

谁能解释一下为什么我放入MySql数据库中的字符串变成了不可用的对象?我该如何修复它?

注意:我使用的是 Nodejs。表项为(id = VARCHAR 且数据 = BLOB)

JSONf 与 JSON 类似,但也可用于函数。

item = {"id":"myitem",
"option":[ (function(key){ craftItem(key,{"piece":"armor"},{"item":[]});}),
(function(key){ test2(key);})
]};

str = JSONf.stringify(item); //str = {"id":"myitem","option":["function (key){ craftItem(key,{\"piece\":\"armor\"},{\"item\":[]});}","function (key){ test2(key);}"]}
console.log(typeof str); //string
obj = JSONf.parse(str);
obj.option[1](); //calling the method as expected

//Note: data is blob type in MySql
client.query("INSERT INTO item(id,data) VALUES ('" + item.id + "','" + JSONf.stringify(item) + "')",
function(err, results) { if(err) throw err
client.query("SELECT * FROM item WHERE id='" + item.id + "'" ,function(err, results) {
str = results[0].data;
console.log(str); //<Buffer 7b 22 69 64 22 3a 22 6d 79 69 74 65 6d 22 2c 22 6f 70 74 69 6f 6e 22 3a 5b 22 66 75 6e...
console.log(typeof str); //Object?...

obj = JSONf.parse(str); //ERROR: Unexpected token p
//Note: p is probably from the ' craftItem(key,{\"piece\":\"armor\"} '
obj.option[1](); //never called because program crashed...

});

});
<小时/>
JSONf.stringify = function(obj) {
return JSON.stringify(obj,function(key, value){
return (typeof value === 'function' ) ? value.toString() : value;
});
}

JSONf.parse = function(str) {
return JSON.parse(str,function(key, value){
if(typeof value != 'string') return value;
return ( value.substring(0,8) == 'function') ? eval('('+value+')') : value;
});
}

最佳答案

好吧,您保存到一个 blob 字段,它只是字节的集合。在 Node 中,这表示为缓冲区对象。您可能想要做的是将字段的 mysql 数据类型从 BLOB 更改为 TEXT,这样就对数据强加了字符编码。这样,返回的对象应该是一个可以解析的字符串。

相关说明您是否确定要将数据序列化到数据库中。这种行为首先就违背了使用数据库的目的,因为您失去了对序列化数据进行有效索引/排序等的能力。

编辑:

另请注意,如果您在 Node 文档上查找缓冲区对象,则该对象并非不可用,您可以将缓冲区转换回字符串对象。但是,如果您存储文本而不是图像等二进制数据,那么最好使用 TEXT

关于javascript - MySql:字符串变成对象?奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18645107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com