3

次のような JSON の名前と値のペアを取得しています。

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

しかし、「名前」の値をキーとして、「値」の値を値としてアクセスしたいと思います。その 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

それを行う1つの方法。

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' ]) でアクセスできます。

これは Yahoo! の 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 に答える