3

我在 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,一个用于所有用户。例如

{ "4ffcfd9fe4b0211629c4ad06": { "read": true, "write": true }, "all" : { "read" : true } }

我可以使用您描述的技术生成第一个对象。我可以生成第二个条目(针对所有用户),但我不知道如何添加这两个条目来创建上面显示的结构。

4

3 回答 3

2

使用方括号表示法来设置键/值对。

acl = {};
acl[value] = {"read": true, "write": true};
于 2013-08-18T03:56:20.700 回答
2

首先——你没有使用JSON——你使用的是Javascript对象文字。

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);
于 2013-08-18T03:57:06.500 回答
1

演示

var json_obj = {};
var value = 123;

json_obj[value] = {"read": true, "write": true}; 

alert(JSON.stringify(json_obj));

结果:

{ "123": {"read": true, "write": true}}

此外,如果您需要访问readand write

json_obj[value]["read"]; // output - true
// or
json_obj[value]["write"]; // output - true
于 2013-08-18T04:02:38.097 回答