【问题标题】:Key value pairs using JSON使用 JSON 的键值对
【发布时间】:2010-09-15 07:50:31
【问题描述】:

有没有办法以键/值对的方式使用 JSON 对象来处理数据结构?
如果是这样,有人可以详细说明如何从键访问关联的值对象

假设我有这样的东西

KEY1 |  VALUE OBJECT1 - (NAME: "XXXXXX", VALUE:100.0)  
KEY2 |  VALUE OBJECT2 - (NAME: "YYYYYYY", VALUE:200.0)  
KEY3 |  VALUE OBJECT3 - (NAME: "ZZZZZZZ", VALUE:500.0)  

【问题讨论】:

标签: javascript jquery json


【解决方案1】:

“JSON 对象”实际上是矛盾的。 JSON 是一种描述对象而非实际对象的文本格式,因此数据可以是 JSON 形式,也可以反序列化为对象。

对应的 JSON 如下所示:

{"KEY1":{"NAME":"XXXXXX","VALUE":100},"KEY2":{"NAME":"YYYYYYY","VALUE":200},"KEY3":{"NAME":"ZZZZZZZ","VALUE":500}}

一旦您将 JSON 解析为 Javascript 对象(在下面的代码中称为 data),您就可以例如访问 KEY2 的对象,它的属性如下:

var obj = data.KEY2;
alert(obj.NAME);
alert(obj.VALUE);

如果您将键作为字符串,则可以使用索引表示法:

var key = 'KEY3';
var obj = data[key];

【讨论】:

  • JSON 是首字母缩略词。将实例称为“JSON 对象”可以提供非常清晰和简洁的参考。根据任何公认的“矛盾修饰”定义,这肯定不是“矛盾修饰”。 JavaScript 对象和 JSON 不是一回事,这一点很清楚:JavaScript Object Notation 是一种“符号”而不是 JavaScript 对象。它是一个 JSON“对象”吗?没错。
  • 我同意@RickO'Shea。请参阅描述的 JSON 对象here
【解决方案2】:
var object = {
    key1 : {
        name : 'xxxxxx',
        value : '100.0'
    },
    key2 : {
        name : 'yyyyyyy',
        value : '200.0'
    },
    key3 : {
        name : 'zzzzzz',
        value : '500.0'
    },
}

如果这就是您的对象的外观并且您想要循环每个名称和值,那么我会尝试做类似的事情。

$.each(object,function(key,innerjson){
    /*
        key would be key1,key2,key3
        innerjson would be the name and value **
    */

    //Alerts and logging of the variable.
    console.log(innerjson); //should show you the value    
    alert(innerjson.name); //Should say xxxxxx,yyyyyy,zzzzzzz
});

【讨论】:

  • inner johnson aka Rock!
【解决方案3】:

JSON(= JavaScript Object Notation) , 是一种轻量且快速的机制,可以将 Javascript 对象转换为字符串,反之亦然。

由于 Javascripts 对象由 key/value 对组成,因此非常易于使用和访问 JSON。

所以如果我们有一个对象:

var myObj = {
    foo:   'bar',
    base:  'ball',
    deep:  {
       java:  'script'
    }
};

我们可以通过调用window.JSON.stringify(myObj); 将其转换为字符串,结果为"{"foo":"bar","base":"ball","deep":{"java":"script"}}"

反过来,我们会调用window.JSON.parse("a json string like the above");

JSON.parse() 成功时返回一个 javascript 对象/数组。

alert(myObj.deep.java);  // 'script'

window.JSON 并非在所有浏览器中都原生可用。一些“旧”浏览器需要一个提供上述功能的小 javascript 插件。更多信息请查看http://www.json.org

【讨论】:

  • 很棒的帖子,虽然使用内置解析器的 jQuery 会更好,因为 OP 已经在使用 jQuery :)
  • @RobertPitt:jQuery .parseJSON() 方法仅在尝试调用window.JSON.parse 之前进行一些正则表达式检查。不幸的是,没有 to_json jQuery 方法,所以你仍然需要使用 window.JSON.stringify
【解决方案4】:

我知道你想问什么,我认为这是你正在寻找的最简单的答案,因为你可能不知道你正在发送多少个密钥对。

简单的密钥对 JSON 结构

var data = {
    'XXXXXX' : '100.0',
    'YYYYYYY' : '200.0',
    'ZZZZZZZ' : '500.0',
}

使用 JavaScript 代码访问密钥对

for (var key in data) 
  { if (!data.hasOwnProperty(key))
    { continue; } 
    console.log(key + ' -> ' +  data[key]);
  };

控制台输出应如下所示

XXXXXX -> 100.0 
YYYYYYY -> 200.0 
ZZZZZZZ -> 500.0

这是一个JSFiddle 来展示它是如何工作的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    相关资源
    最近更新 更多