Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSON键被称为";“真的”;,无法在JavaScript中引用(JSFIDLE示例)_Javascript_Json - Fatal编程技术网

JSON键被称为";“真的”;,无法在JavaScript中引用(JSFIDLE示例)

JSON键被称为";“真的”;,无法在JavaScript中引用(JSFIDLE示例),javascript,json,Javascript,Json,首先,我使用一些在线工具将Plist(XML格式)转换为JSON,这不是问题所在。我设法从这个相当大的JSON文件中选择了重要的值。有了这些重要信息,我正在重建一个新的JSON文件,该文件非常精简,包含我可以用于插件的信息,稍后我将创建该文件 plist到JSON的转换很难看。在某些情况下,和被转换为JSON,将其保留在JSON中:“false”:“或“true”:“” 我正在使用jQuery 检查jsiddle以获取示例 还是在这里 // Simplified (not really a JS

首先,我使用一些在线工具将Plist(XML格式)转换为JSON,这不是问题所在。我设法从这个相当大的JSON文件中选择了重要的值。有了这些重要信息,我正在重建一个新的JSON文件,该文件非常精简,包含我可以用于插件的信息,稍后我将创建该文件

plist到JSON的转换很难看。在某些情况下,
被转换为JSON,将其保留在JSON中:
“false”:“
“true”:“

我正在使用jQuery

检查jsiddle以获取示例

还是在这里

// Simplified (not really a JSON file, but this will do it for explaining) 
var themeJSON = {
    "item": {
        "false": "",
    },
};

// I need to know if its enabled: "true" or disabled: "false"

// function for checking if this is the default option
function checkDefault() {
    // true is a keyword!
    if (themeJSON.item.true) {
        return "1";
    // so is false!
    } else(themeJSON.item.false) {
        return "0";
    }
}
也许我使用了其他函数,比如find()

更新答案: 感谢这些评论,这就是我现在所拥有的:

function checkDefault() {
    if (item.hasOwnProperty("true")) {
        return "1";
    } else if(item.hasOwnProperty("false")) {
        return "0";
    }
}

尝试将属性名称用作字符串:

if (themeJSON.item['true']) {
  return '1';
}
else if (themeJSON.item['false']) {
    return "0";
}
编辑-注释正确地指出,尽管通过字符串值访问属性确实有效,但您的代码在其他方面是有缺陷的。如果确实为属性指定了空字符串值,那么您真正需要的是一种测试属性是否存在的方法,而不是(正如此代码所做的那样)只检查属性的值:

if (typeof themeJSON.item['true'] !== 'undefined') { ... }
或者,或者:

if ('true' in themeJSON.item) { ... }
针对空字符串显式检查相等性也可以:

if (themeJSON.item['true'] === '') { ... }

当对象属性的名称是保留关键字时,可以使用数组索引表示法来引用它

检查
是否具有名为
false
的属性的一种方法:

> themeJSON.item.hasOwnProperty("false");
true

这并不理想,因为单个对象可以同时具有
false
属性和
true
属性。

在JS中,
foo.bar
相当于
foo['bar]
。因此:

if (themeJSON.item['true'] === "")
请注意,需要将
===
作为
false===“但是
false!==”“”

而且,我必须挑剔
themeJSON
不再是JSON,因为它不是字符串——它只是另一个JavaScript对象。您不应该混淆这两者。

试试这段代码

function checkDefault() {
    // true is a keyword!
    if ("true" in themeJSON.item) {
        return "1";
    // so is false!
    } else if ("false" in themeJSON.item) {
        return "0";
    }
}

@Olegas不,不会的,但那不是OP真正想问的。不过,我会更新答案以反映您的有效观点。@user465395好吧,我发布的两个技巧确实有效,尽管您的解决方案也很好(“.hasOwnProperty()”函数)。我知道梅森不是JSON,事实上我正在处理900多行JSON(整理)。为此,为了简化示例,我使用了Mejson。我用自己的代码制作了JSFIDLE示例,效果很好!