JSON键被称为";“真的”;,无法在JavaScript中引用(JSFIDLE示例)
首先,我使用一些在线工具将Plist(XML格式)转换为JSON,这不是问题所在。我设法从这个相当大的JSON文件中选择了重要的值。有了这些重要信息,我正在重建一个新的JSON文件,该文件非常精简,包含我可以用于插件的信息,稍后我将创建该文件 plist到JSON的转换很难看。在某些情况下,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
和
被转换为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示例,效果很好!