我有一些看起来像这样的JSON,它被声明为一个名为“ jsonObjSuper”的变量:
{
"Watchlist": "My Watchlist",
"Instruments": {
"instrument1": [
"Company ABC",
[
{
"snapshotTimeUTC": "2018-11-01T00:00:00",
"snapshotTime": "2018/11/01 00:00:00"
}
]
],
"instrument2": [
"Company XYZ",
[
{
"snapshotTimeUTC": "2018-11-01T00:00:00",
"snapshotTime": "2018/11/01 00:00:00"
}
]
]
}
}
我正在尝试使用“监视列表”-以下代码为IndexedDB分配keyPath:
request.onupgradeneeded = function(event) {
var db = event.target.result;
var key = jsonObjSuper["Watchlist"]
var objectStore = db.createObjectStore("instruments", { keyPath: key});
}
但是当我尝试此操作时,出现此错误:
“未捕获的DOMException:无法在'IDBDatabase'上执行'createObjectStore':keyPath选项不是有效的密钥路径。”
如果我在“ key”变量上执行console.log,则按预期通过的值将是“ My Watchlist”。
我也确实尝试了JSON.stringify“ key”变量,以查看是否有所作为,但仍然出现错误。
可能是什么原因造成的?
非常感谢
答案 0 :(得分:1)
给出您的代码:
var key = jsonObjSuper["Watchlist"]
var objectStore = db.createObjectStore("instruments", { keyPath: key});
数据定义:
jsonObjSuper = {
"Watchlist": "My Watchlist",
...
}
您正在有效地做
db.createObjectStore("instruments", { keyPath: "My Watchlist"});
"My Watchlist"
不是有效的密钥路径。对象存储库的密钥路径必须是一个字符串,该字符串是一个有效的JS标识符或一个点分隔的标识符序列或一个空字符串,或者是一个或多个以上的数组。 (有关确切定义,请参见https://w3c.github.io/IndexedDB/#key-path-construct。)"My_Watchlist"
是有效的,而"My Watchlist"
无效。