Javascript доступ к парам имя / значение - PullRequest
2 голосов
/ 18 декабря 2009

Я получаю пары имя / значение JSON, которые выглядят так:

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

Но я бы хотел получить доступ к значению «имя» как КЛЮЧ, а значение «значение» - как ЗНАЧЕНИЕ. Есть ли элегантный способ превратить этот кусок JSON в нечто подобное?

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

Ответы [ 5 ]

5 голосов
/ 18 декабря 2009

Попробуйте это:

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" };
2 голосов
/ 18 декабря 2009

Один из способов сделать это.

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 );
1 голос
/ 18 декабря 2009

Я бы рекомендовал использовать метод 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! о том, как его использовать - http://yuiblog.com/blog/2006/09/26/for-in-intrigue/

1 голос
/ 18 декабря 2009
function objectflatten (array) {
  var out = {}, i;
  for(i = 0; i < array.length; i++) {
     out[array[i].name] = array[i].value;
  }
  return out;
}

Это функция, которая будет принимать объект в представленной вами форме и выводить его как «обычный» объект с именными значениями в качестве ключей и значениями в качестве значений.

0 голосов
/ 18 декабря 2009

Я предполагаю, что вы используете PHP, и PHP повторяет вашу ассоциацию так:

echo json_encode($result); 

В вашем javascript вы можете сделать это:

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

Я не уверен, что вы этого хотите, но это решение.

...