Javascript访问名称/值对

时间:2009-12-17 22:33:38

标签: javascript hashtable name-value

我得到的JSON名称/值对看起来像这样:

{
   "Name":"parentid",
   "Value":"blah"
},
{
   "Name":"siteid",
   "Value":"blah"
},
{
   "Name":"sitename",
   "Value":"blah"
}

但我想将“name”值作为KEY访问,将“value”值作为VALUE。是否有一种优雅的方式将JSON变成这样的东西?

{'parentid', 'blah'},
{'sitename', 'blah'}

5 个答案:

答案 0 :(得分:5)

试试这个:

var items = [
    {
       "Name":"parentid",
       "Value":"blah"
    },
    {
       "Name":"siteid",
       "Value":"blah"
    },
    {
       "Name":"sitename",
       "Value":"blah"
    }
];

var results = new Object();

for (var i = 0; i < items.length; i++)
{
    results[items[i].Name] = items[i].Value;
}

这将导致类似:

var results = { parentid: "Blah", siteid: "Blah", sitename: "Blah" };

答案 1 :(得分:2)

一种方法。

var json = [
  {
    "Name":"parentid",
    "Value":"blah"
  },
  {
    "Name":"siteid",
    "Value":"blah"
  },
  {
    "Name":"sitename",
    "Value":"blah"
  }
];

for ( var i = 0, l = json.length, obj; i < l; i++ )
{
  obj = json[i];
  json[i] = new Object();
  json[i][obj.Name] = obj.Value;
} 

// console.log() requires Firebug
console.log( json );

答案 2 :(得分:1)

function objectflatten (array) {
  var out = {}, i;
  for(i = 0; i < array.length; i++) {
     out[array[i].name] = array[i].value;
  }
  return out;
}

这是一个函数,它将以您呈现的形式获取一个对象,并将其作为“普通”对象输出,其名称值为键,值值为值。

答案 3 :(得分:1)

我建议使用for( ... in ... )方法执行此任务。它会抓住您需要的关键名称。

var jsonObj = eval( '([{ "Name":"parentid", "Value":"blah" }])' );

for( var i = 0, assoc = {}, key; i < jsonObj.length; ++i )
{
    for( key in jsonObj[ i ] ) // <-- this right here
    {
        assoc[ key ] = jsonObj[ i ][ key ];
    }
}

你最终(来自Firebug)

Object Name=parentid Value=blah

可以通过object.key或object ['key']访问(在我们的例子中是assoc.Name或assoc ['Value'])

这是来自Yahoo! Douglas Crockford的链接关于使用它 - http://yuiblog.com/blog/2006/09/26/for-in-intrigue/

答案 4 :(得分:-1)

我假设您正在使用PHP,并且PHP回应了您这样的问题:

echo json_encode($result); 

在你的javascript中,你可以这样做:

// Soemthing retrieves php result and puts it in `var result`.
data = eval("(" + result+ ")");
alert(data.parentid);

我不确定这是否是你想要的,但这是一个解决方案。