0

我有以下来自 Facebeook Graph API 调用的 JSON 数据:

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

但是,我正在使用 JQuery 自动完成,它需要命名字段(我相信)labelvalue

问题有没有一种简单的方法可以将“name”更改为“label”和“id”更改为“value”,而无需执行巨大的 PHP str_replace 或类似的操作?

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 回答