0

Facebeook Graph API 呼び出しからの次の JSON データがあります。

var data = [{"name":"Jonathan Montiel","id":"6546478"},{"name":"Jackson C. Gomes","id":"65654"}];

ただし、フィールドに名前を付ける必要があるJQueryオートコンプリートを使用しています(私は信じています) labelvalue

質問膨大な PHP の str_replace などを実行せずに、「name」を「label」に、「id」を「value」に変更する簡単な方法はありますか?

4

2 に答える 2

0

そうは思いません。連想配列に分解した後、手動で変更することをお勧めします

$array = array('name'=>'Jonathan Montiel','id'=>'6546478');

$newkeys = array('name' => 'label', 'id' => 'value');

$newarray = array();
foreach($array as $key => $value) {
    $newarray[ $newkeys[ $key ] ] = $value;
}

echo json_encode($newarray);
于 2013-05-26T16:18:41.100 に答える
0

JavaScript ではとても簡単です: JavaScript オブジェクト (それがどのように見えるか) があると仮定して、フィールドを変更するだけです:

var data = data[0], // your data is first element in an array
    new_data = {},
    k;

for (k in data) {
  if (Object.hasOwnProperty.call(data, k)) {
    if (k === 'name') k = 'label';
    else if (k === 'id') k = 'value';

    new_data[k] = data[k];
  }
}

// new_data is the correct format now
console.log(new_data);

JSON 文字列がある場合は、正規表現の置換を実行できます。

var new_json = data[0].replace(/\"([\w_\$]+)\":/g, function (all, key) {
  if (key === 'name') key = 'label';
  else if (key === 'id') key = 'value';
  return '"' + key + '":';
});

PHP に相当するものはかなり似ています。

$new_json = preg_replace_callback('/\"([\w_\$]+)\":/', function ($matches) {
  if ($matches[1] == 'name') {
    return '"label":';
  } else if ($matches[1] == 'id') {
    return '"value":';
  }
  return $matches[0];
}, $data[0]);
于 2013-05-26T16:18:50.070 に答える