JSON语法-变量被解释为文字
JSON syntax - variable being interpreted as a literal
我在JS函数中运行以下代码。参数value
包含一个用户id字符串:
function create_acl(value) {
var acl = { value : { "read": true, "write": true}};
return acl;
}
如果值="123",那么我希望结果是:
{ "123": {"read": true, "write": true}}
然而,我得到的是:
{"value":{"read":true,"write":true}}
正如您所看到的,代码将value
解释为文字。有人知道如何重写它以获得所需的行为吗?
最初的问题(如上)经过一些讨论后得到了扩展:
我需要创建一个包含两个条目的acl,一个用于特定的用户id,一个适用于所有用户。例如
{ "4ffcfd9fe4b0211629c4ad06": { "read": true, "write": true }, "all" : { "read" : true } }
我可以使用你描述的技术生成第一个对象。我可以生成第二个条目(针对所有用户),但我不知道如何添加这两个条目来创建上面显示的结构。
首先——您没有使用JSON
——您使用的是Javascript Object literal。
function create_acl(value) {
var acl = {};
acl[value] = { "read": true, "write": true};
return acl;
}
根据操作人员的评论修改答案:
function create_acl(value) {
var acl = {};
acl[value] = { "read": true, "write": true};
acl["*"] = { "read": true, "write": false};
return acl;
}
正如其他人在回答中指出的那样:
var test_acl = creat_acl("foobar");
console.log(test_acl["foobar"]["read"]);
console.log(test_acl.foobar.read);
// BUT NOT
// console.log(test_acl.*.read);
// This is OK
console.log(test_acl["*"]["read"]);
console.log(test_acl["*"].read);
使用方括号表示法设置键/值对。
acl = {};
acl[value] = {"read": true, "write": true};
查看DEMO
var json_obj = {};
var value = 123;
json_obj[value] = {"read": true, "write": true};
alert(JSON.stringify(json_obj));
结果:
{ "123": {"read": true, "write": true}}
此外,如果您需要访问read
和write
:
json_obj[value]["read"]; // output - true
// or
json_obj[value]["write"]; // output - true
相关文章:
- 添加文字和评论功能更新Div
- 你能解释一下这个阶乘函数是如何工作的吗?
- 如何计算对象文字中的键
- I'我想放下画布上的文字.帮帮我
- 你能解释一下为什么这个javascript不正确吗
- 对象文字方法上的Javascript绑定不起作用
- 以ECMAScript 5及更高版本为目标时,八进制文字不可用
- ES6 模板文字是否比 eval 更安全
- Javascript 如何强制 string.replace 不将我的字符串解释为正则表达式
- Appcelerator Titanium:在运行时下载并解释JavaScript代码
- 注入的HTML仅在Dom中解释为字符串
- 是索引数组文字的好做法
- 对象.创建解释
- 从多行文字中获取第一个修剪的字符串
- 如何在只接受字符串值/文字的HTML属性中调用函数
- 无法解释的JavaScript行为-错误
- 使用ng选项,我如何筛选准确解释给定值的内容
- JSON语法-变量被解释为文字
- javascript引擎解释对象文字时发生了什么
- 关于java脚本中对象文字的解释