在JavaScript中序列化和反序列化数组

35

我正在使用基于jQuery的tag-it库来创建一个标签系统,类似于stackoverflow的标签系统。

用户输入标签后,该库返回一个javascript数组,我想将其保存在MySQL数据库中。我没有找到javascript中的序列化和反序列化函数。

在编写自己的函数之前,我想确保我不是在重新发明轮子。似乎没有本地方法将数组保存到数据库中,然后再次使用它。

简而言之 => 如何将javascript数组保存在MySQL数据库中以便以后重用?


1
JSON怎么样?这取决于你想如何保存它;你是真的想要在数据库中为所有标签创建单行,还是想要分开的行?如果将标签分成不同的行,似乎更容易按标签搜索。 - Pointy
这似乎是最好的方法。谢谢。 - Lukmo
好的,就像我说的那样,如果查询必须搜索一个包含多个标签的字符串列,按标签搜索会慢得多。 - Pointy
问题是我想要一个动态数量的标签,所以我不能使用单独的行,因为一个疯狂的用户可能会在一个条目中想要30个标签。 - Lukmo
1
只需创建一个带有主键列和标签列的表格,然后您可以拥有任意数量的标签。这是一种相当常见的数据库模式。 - Pointy
3个回答

66

您可以使用JSON.stringify()MDN文档)和JSON.parse()MDN文档)将JavaScript对象转换为字符串表示形式,以便将其存储在数据库中。

var arr = [ 1, 2, 3 ];

var serializedArr = JSON.stringify( arr );
// "[1, 2, 3]"

var unpackArr = JSON.parse( serializedArr );
// identical array to arr

如果您的后端是用PHP编写的,那么有类似的方法来处理JSON字符串:json_encode()PHP官方文档)和json_decode()PHP官方文档)。

大多数其他编程语言也提供类似的功能来处理JSON字符串。


1
我只想指出,JSON.parse将清理使用Newtonsoft.Json.JsonConvert.SerializeObject的Web Api调用的序列化输出。在我的情况下,我有一个序列化的字符串看起来像 "["Industry","Region","Topic","Type"]",而JSON.parse将其转换为所需的字符串数组。 - devinbost
这是简单而精确的解决方案:D - deva11

8

您可以使用JavaScript对象表示法(JSON)格式。

Javascript支持以下方法:


5

直接 JSON它怎么样?

var arr = [1,2,3];
var arrSerialized = JSON.stringify(arr);
...

var arrExtracted = JSON.parse(arrSerialized);

顺便提一下,JSON经常用于在其他语言中进行序列化,尽管它们有自己的序列化函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接