3

我得到如下所示的 JSON 名称/值对:

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

但我想将“名称”值作为 KEY 访问,将“值”值作为 VALUE 访问。有没有一种优雅的方法可以将那段 JSON 变成这样的东西?

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

5 回答 5

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" };
于 2009-12-17T22:40:09.083 回答
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 );
于 2009-12-17T22:46:23.813 回答
1
function objectflatten (array) {
  var out = {}, i;
  for(i = 0; i < array.length; i++) {
     out[array[i].name] = array[i].value;
  }
  return out;
}

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

于 2009-12-17T22:41:21.997 回答
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'])

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

于 2009-12-17T22:57:04.697 回答
-1

我假设您正在使用 PHP,并且 PHP 会像这样与您联系起来:

echo json_encode($result); 

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

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

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

于 2009-12-17T22:40:44.970 回答