JSON语法-变量被解释为字面量

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 } }

我可以使用您描述的技术生成第一个对象。我可以生成第二个条目(适用于所有用户),但我无法弄清楚如何添加这两个条目以创建上面显示的结构。

3个回答

2
使用方括号表示法来设置键/值对。
acl = {};
acl[value] = {"read": true, "write": true};

2

首先,你没有使用JSON——你使用的是JavaScript对象字面量。

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,例如:{ "4ffcfd9fe4b0211629c4ad06": { "read": true, "write": true }, "all" : { "read" : true } }。我可以使用您描述的技术生成第一个对象。我可以生成第二个条目(针对所有用户),但我无法弄清楚如何添加这两个条目以创建上面显示的结构。这让我抓狂了。我花了将近两天的时间来解决这个本应该是微不足道的简单操作。 - user2693205
@user2693205 你应该考虑将其编辑到问题中。 - Jonathan Lonowski
1
如果你执行 acl['all'] = {'read':true};,难道你不应该得到它吗?我无法清楚地理解你想要什么... - Brian
我记得你用的是 * 而不是 all. 不过不管怎样,答案仍然是正确的。 - Jeremy J Starcher
1
@A.S.Roma 这个问题显然一直在我的面前,我现在感觉非常愚蠢,自嘲起来。哎呀。:-S 谢谢大家,我相信我们都曾经历过这种情况。(汤姆羞愧地溜走了……) - user2693205
@JeremyJStarcher 我确实使用了 *,但由于某种原因,评论输入框将其删除了。非常感谢您的帮助。之前我很傻很不开心,但现在至少我很开心 :-) - user2693205

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`:”。需要保留html格式不做解释。
json_obj[value]["read"]; // output - true
// or
json_obj[value]["write"]; // output - true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接