尝试为keyPath分配变量

时间:2018-11-11 12:24:37

标签: javascript json indexeddb

我有一些看起来像这样的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”变量,以查看是否有所作为,但仍然出现错误。

可能是什么原因造成的?

非常感谢

1 个答案:

答案 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"无效。