Javascript 在cookie中存储和检索json对象

Javascript 在cookie中存储和检索json对象,javascript,json,cookies,Javascript,Json,Cookies,我试图在cookie中存储json对象,但遇到了一些问题。 我可以这样创建我的对象: product = { "name" : "prodname", "quantity" : 4 } 然后我将这个对象保存在我的cookie中。随着更多的产品被添加(这是一个购物篮),我通过在cookie字符串的末尾添加新的对象来添加更多的字符串(因此我基本上有很多单独的小对象)。不过,我很难从cookie字符串中提取对象。当我尝试从cookie中读回对象时,$.parseJSON和eval都失败。

我试图在cookie中存储json对象,但遇到了一些问题。 我可以这样创建我的对象:

product = {
   "name" : "prodname",
   "quantity" : 4
}

然后我将这个对象保存在我的cookie中。随着更多的产品被添加(这是一个购物篮),我通过在cookie字符串的末尾添加新的对象来添加更多的字符串(因此我基本上有很多单独的小对象)。不过,我很难从cookie字符串中提取对象。当我尝试从cookie中读回对象时,
$.parseJSON
eval
都失败。任何帮助都将不胜感激。

可能会是这样:

{"products": [
    {
       "name" : "prodname",
       "quantity" : 4
    },
    {
       "name" : "prodname2",
       "quantity" : 3
    }
]}
[]
表示数组。当您想要添加另一个产品时,您可以从cookie加载它,更新数组,然后再次保存它。如果需要,可以跳过外部对象,让cookie只是数组

编辑:说
cookieStr
是你的cookie

var root = $.parseJSON(cookieStr);
root.products.push(newProduct);
cookieStr = JSON.stringify(root);

将从JSON.stringify(cookieStr)返回的值保存到cookie中不是一个好做法。它可能会导致某些浏览器出现错误

在使用它之前,您应该将它转换为base64(使用btoa),在读取它时,从base64转换(使用atob)


当更多的产品添加到篮子中时,我如何将新产品添加到该字符串中?为什么使用
$.parseJSON()
而不是
JSON.parse()
?jQuery版本更健壮吗?@MikeCauser,是的,jQuery版本(
$.parseJSON
)有更好的浏览器支持。不幸的是,对于
JSON.stringify
,在核心jQuery中没有等价物。因此,如果您支持较旧的浏览器,您最终不得不使用垫片。希望您知道Cookie的空间非常有限。你可能应该看看本地存储。URL编码的值也可以很好地工作,并且可以用于IE<10“它可能导致某些浏览器出现错误”什么错误?如果有更多的上下文或链接来说明bug是什么,那会很有帮助。
val = JSON.stringify(cookieStr)
val = btoa(val)

write_cookie(val)