第一次与json打交道。我有一个php文件处理通过ajax发送给它的post变量,然后它将回显一个json_encoded数组。我无法通过它进行迭代,因为它用双引号括起来。我怎么解决这个问题?
jquery代码:
$j.ajax({
type: 'GET',
url: 'http://example.com/doaction.php',
data: 'num=' + fileNum[1],
success: function(jsonobj) {
for (var key in jsonobj) {
if (jsonobj.hasOwnProperty(key)) {
var jsonob = jsonobj[key];
console.log(key + " = " + jsonob);
}
}
}
});
doaction.php中的php代码:
if ($_GET['num']) {
$meta = file_meta($_GET['num']); // returns an array
echo json_encode($meta);
}
file_meta函数:
function file_meta($num = 1) {
$num = '_' . $num;
$meta = array(
'filename' . $num => array(
'value' => ''),
'link' . $num => array(
'value' => ''),
'description_' . $num => array(
'value' => ''),
'metadata' => array(
'type' => 'checkbox',
'label' => 'Indicate applicable competencies:',
'items' => array(
'core_teaching' . $num => array(
'label' => 'Core Teaching',
'value' => 0
),
'teaching_learning' . $num => array(
'label' => 'Teaching Learning',
'value' => 0
),
'instructional_design' . $num => array(
'label' => 'Instructional Design',
'value' => 0
),
'assignment_and_evaluation' . $num => array(
'label' => 'Assignment & Evaluation',
'value' => 0
),
'research' . $num => array(
'label' => 'Research',
'value' => 0
),
'mentoring' . $num => array(
'label' => 'Mentoring',
'value' => 0
)
)
)
);
return $meta;
}
控制台中的结果不是我所期望的。它应该是键值对,但它是乱码,而不是如下所示。
500 = ,
501 = "
502 = v
503 = a
.
.
.
我很确定这是因为json对象$.ajax()
正在包含在引号中。当我将object
没有引号直接分配给jsonobj
时,我得到了正确的结果。当我直接从$.ajax()
函数中调用file_meta()时,我得到了正确的结果:
var jsonobj = <?php $etc = file_meta(); echo json_encode($etc); ?>;
// iterate here...
然而,这不是我想要的,因为file_meta()
需要与click事件中检索到的元素的值一起传递。通过$ _GET发送它是我所知道的唯一。
答案 0 :(得分:4)
使用json_decode()将JSON字符串转换为PHP变量
$var = json_decode('{"file":{"test": 0}}');
在javascript使用中:
var decoded = eval('{"file":{"test": 0}}');
如果您使用的是jQuery库,请使用:
var json = '{"file":{"test": 0}}';
var decoded = $.parseJSON(json);