jquery 在JavaScript对象中可以把整数作为键存储吗?

d4so4syb  于 2024-01-07  发布在  jQuery
关注(0)|答案(3)|浏览(133)

我正在用JSON创建一个索引文件,我正在使用它作为我正在开发的JavaScript应用程序的数据库索引。
我的索引看起来像这样:

{
    "_id": "acomplex_indices.json",
    "indexAB": {
        "title": {
            "Shawshank Redemption": [
                "0"
            ],
            "Godfather": [
                "1"
            ],
            "Godfather 2": [
                "2"
            ],
            "Pulp Fiction": [
                "3"
            ],
            "The Good, The Bad and The Ugly": [
                "4"
            ],
            "12 Angry Men": [
                "5"
            ],
            "The Dark Knight": [
                "6"
            ],
            "Schindlers List": [
                "7"
            ],
            "Lord of the Rings - Return of the King": [
                "8"
            ],
            "Fight Club": [
                "9"
            ],
            "Star Wars Episode V": [
                "10"
            ],
            "Lord Of the Rings - Fellowship of the Ring": [
                "11"
            ],
            "One flew over the Cuckoo's Nest": [
                "12"
            ],
            "Inception": [
                "13"
            ],
            "Godfellas": [
                "14"
            ]
        },
        "year": {
            "1994": [
                "0",
                "3"
            ],
            "1972": [
                "1"
            ],
            "1974": [
                "2"
            ],
            "1966": [
                "4"
            ],
            "1957": [
                "5"
            ],
            "2008": [
                "6"
            ],
            "1993": [
                "7"
            ],
            "2003": [
                "8"
            ],
            "1999": [
                "9"
            ],
            "1980": [
                "10"
            ],
            "2001": [
                "11"
            ],
            "1975": [
                "12"
            ],
            "2010": [
                "13"
            ],
            "1990": [
                "14"
            ]
        }
    }
}

字符串
因此,对于每个keyword(如Pulp Fiction),我存储匹配的document-id(s)
我的问题是integers/numbers/non-string data,就像上面例子中的发行年份,它被存储为字符串,而我希望它被存储为数字。
我创建索引条目如下:

// indices = the current index file
// doc = the document to update the index with
// priv.indices = all indices defined for this application instance
// priv.indices.fields = index fields e.g. "year", "director", "title"
// priv.indices.name = name of this index

priv.updateIndices = function (indices, doc) {
var i, j, index, value, label, key, l = priv.indices.length;

// loop all indices to add document
for (i = 0; i < l; i += 1) {
  index = {};
  index.reference = priv.indices[i];
  index.reference_size = index.reference.fields.length;
  index.current = indices[index.reference.name];

  for (j = 0; j < index.reference_size; j += 1) {
    label = index.reference.fields[j];    // like "year"
    value = doc[label];                   // like 1985

    // if document has a label field (e.g. doc.year = 1985)
    if (value !== undefined) {

      // check if the index file already contains an entry for 1985
      index.current_size = priv.getObjectSize(index.current[label]);
      
      if (index.current_size > 0) {
        // check if the document id is already in the index
        // in case the data is updated (e.g. change 1982 to 1985)
        key = priv.searchIndexByValue(
          index.current[label],
          doc._id,
          "key"
        );
        if (!!key) {
          delete index.current[label][key];
        }
      }
      // create a new array if 1985 is not in the index yet
      if (index.current[label][value] === undefined) {
        index.current[label][value] = [];
      }
      // add the document id to an existing entry
      index.current[label][value].push(doc._id);
    }
  }
}
return indices;
};


这很好,除了我想存储为非字符串(整数,数字或日期时间)的字段,如上面例子中的年份最终在我的索引中作为字符串。

问题

在JSON文档中是否可以存储“非字符串”类型?如果可以,我是否也可以将键/值对的键存储为“非字符串”元素。
如果没有,我是否必须在索引定义中添加一个参数来声明每个键的类型,以便在遇到键字符串时修改它,或者有更好的方法吗?
谢谢你,谢谢

eqqqjvef

eqqqjvef1#

在JSON文档中是否可以存储“非字符串”类型?
可以。属性的值可以是字符串、数字、布尔值、对象、数组或null(undefined是一个值得注意的例外-它是原生JavaScript类型,但不是有效的JSON值)。
我也可以将键/值对的键存储为“非字符串”元素吗?
不可以。键名必须始终是字符串。但是,这并不意味着您不能将该字符串解析为其他JavaScript类型。例如,如果您有字符串但需要数字,则可以使用parseInt函数或一元+运算符。
请参阅JSON grammar以了解更多详细信息。

enyaitl3

enyaitl32#

不,你不能,在JSON中,键是字符串。
你能做的最好的就是存储这些键的字符串表示,无论是整数还是对象(更复杂的是,你必须构建一个序列化函数)。
如果你只想使用从0开始的连续整数键,那么你可以使用数组。

luaexgnf

luaexgnf3#

根据json spec,你可以在任何你可以有值的地方有一个数字。所以一个对象的键必须是一个字符串,但值可以是一个数字。同样,数组中的任何值都可以是一个数字。
不过,规范与此无关;我认为问题在于这一行:

index.current[label][value].push(doc._id);

字符串
当你读取doc._id时,这是一个字符串。如果你想把它存储在JSON中作为一个数字,你需要转换它:

index.current[label][value].push(parseInt(doc._id, 10));


注意,just numbers as IDs is not valid HTML

相关问题