我在JS函数中运行以下代码。参数value
包含用户ID字符串:
function create_acl(value) {
var acl = { value : { "read": true, "write": true}};
return acl;
}
如果value =“123”,那么我期待结果为:
{ "123": {"read": true, "write": true}}
然而,我得到的是:
{"value":{"read":true,"write":true}}
如您所见,代码将value
解释为文字。有谁知道如何重写这个以获得所需的行为?
经过一些讨论后,原始问题(上文)得到了扩展:
我需要创建一个包含2个条目的acl,一个用于特定用户ID,一个用于所有用户。 e.g。
{ "4ffcfd9fe4b0211629c4ad06": { "read": true, "write": true }, "all" : { "read" : true } }
我可以使用您描述的技术生成第一个对象。我可以生成第二个条目(对于所有用户),但我无法弄清楚如何添加2个条目来创建上面显示的结构。
答案 0 :(得分:2)
使用方括号表示法设置键/值对。
acl = {};
acl[value] = {"read": true, "write": true};
答案 1 :(得分:2)
首先 - 你没有使用JSON
- 你正在使用Javascript Object literal。
function create_acl(value) {
var acl = {};
acl[value] = { "read": true, "write": true};
return acl;
}
根据OP评论修改后的答案:
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);
答案 2 :(得分:1)
查看 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