Javascript 对此使用JSON对象感到困惑

Javascript 对此使用JSON对象感到困惑,javascript,jquery,Javascript,Jquery,使用Javascript,我希望有一个JSON或数组来存储id和ip数据对,这样,如果我想要一个特定id=123的ip,我就可以很容易地得到它,即使用data[123]或data['123']['ip'] 我试过了,但似乎无法根据id选择ip: var connected_clients = { "clients": [{id: "12345", ip: "123.123.123.123"}] }; 我也试过在下面使用它,但我似乎无法添加新的id/ip对 var connected_c

使用Javascript,我希望有一个JSON或数组来存储
id
ip
数据对,这样,如果我想要一个特定
id=123
ip
,我就可以很容易地得到它,即使用
data[123]
data['123']['ip']

我试过了,但似乎无法根据
id
选择
ip

var connected_clients = {
    "clients": [{id: "12345", ip: "123.123.123.123"}]
};
我也试过在下面使用它,但我似乎无法添加新的id/ip对

var connected_clients = {
    "12345": {
        id: "12345",
        ip: "123.123.123.123"
    }
};

应该怎样做呢?

第二种方法在你的情况下应该很好。将添加如下新元素(假设(
id
ip
作为变量给出):

这不会检查该id下是否已经有条目。我想您必须单独检查它。

您尝试过吗

 var connected_clients = {
   "clients": [{"id": "12345", "ip": "123.123.123.123"}]
  };

像使用一样使用它

var测试={ "12345": "123.123.123.123" })

现在:

使用jQuery map()实用程序函数将一维数组提取到关联数组。请参阅下面的链接。 (首先,你没有“JSON”,你有一个对象。JSON是数据的字符串表示形式——或者你可以把它看作是序列化为字符串形式的对象。无论如何…)

如果您希望能够查找已知id的详细信息,那么您的第二个结构可以正常工作

如果有更多的客户端,它将如下所示:

var connected_clients = {
    "12345": {
        id: "12345",
        ip: "123.123.123.123"
    },
    "12346": {
        id: "12346",
        ip: "123.234.345.456"
    },
    "12347": {
        id: "12347",
        ip: "555.444.333.222"
    }
};
connected_clients["12346"]["ip"]
// OR
connected_clients["12346"].ip
// OR if the id was in a variable
var currentId = "12346";
connected_clients[currentId]["ip"]
您将获得客户端“12346”的ip,如下所示:

var connected_clients = {
    "12345": {
        id: "12345",
        ip: "123.123.123.123"
    },
    "12346": {
        id: "12346",
        ip: "123.234.345.456"
    },
    "12347": {
        id: "12347",
        ip: "555.444.333.222"
    }
};
connected_clients["12346"]["ip"]
// OR
connected_clients["12346"].ip
// OR if the id was in a variable
var currentId = "12346";
connected_clients[currentId]["ip"]
如果要添加客户端,请执行以下操作:

connected_clients[newId] = { id: newId, ip : someIp };
如果要检查特定id是否已存在:

if (connected_clients.hasOwnProperty(someId)) {
   // do something
}
// OR use 'in' since your object doesn't really have a prototype chain to worry about
if (someId in connected_clients) {
   // do something
}
要遍历所有客户端,请执行以下操作:

for (var key in connected_clients) {
   console.log(key + " - ip is " + connected_clients[key]["ip"]);
}
进一步阅读:


您需要在对象文本中使用大括号
{}
。它是一个数组文本。我几乎可以肯定我可以使用[]来表示数组。您将使用
[]
表示数组文本是对的,但您拥有的不是数组。数组不使用
语法,因为它们没有属性名称(它们有隐含的数字索引)。哎呀。等等,JS没有关联数组?到底是怎么回事..这句语法:myArray[“someIndex”]实际上是什么意思?JavaScript版本的关联数组是一个“对象”。你可以使用方括号像数组一样获取或设置现有对象的单个属性,所以
myObj[“someProperty”]
将为您提供
myObj
someProperty
属性。但要使用对象文本创建新对象,您需要
{}
-请参见问题或我的答案中显示的结构。(如果将所有
[]
替换为
{},请在
var
语句中)
这是正确的;您的
客户机\u ip=…
语句已经正确。)
for (var key in connected_clients) {
   console.log(key + " - ip is " + connected_clients[key]["ip"]);
}