我正在尝试正确地格式化我的JSON编码数组。这是我的PHP MySQL查询:
$query = "SELECT date, value1, value2
FROM testdata
ORDER BY date ASC";
$result = mysql_query($query);
$myChartData = array();
while($row = mysql_fetch_assoc($result)){
$myChartData[] = $row;
}
<script type="text/javascript">
var chartData = <?php echo json_encode($myChartData); ?>;
从控制台,对象看起来像这样:
[Object { date="2011-02-23", value1="133034", value2="12105.78"},
Object { date="2011-02-24", value1="122290", value2="12068.50"},
Object { date="2011-03-08", value1="453142", value2="12214.38"}]
日期周围的引号保留,但是value1和value2上的引号需要被删除。
所有这一切的自学教练...感谢您的帮助!
答案 0 :(得分:2)
<强>首先强>
日期周围的引号保留,但是value1和value2上的引号需要被删除。
没有引号!您看到的是chartData
中包含的数据的直观表示。在这种情况下,它是一个包含三个对象的数组,每个对象包含三个包含字符串的属性
你想要的是将其中一些字符串转换为数字(整数,浮点数)。
您似乎没有在数据库中正确存储数据。如果值是数字,则它们将被编码。
唯一合理的解决方案是在此结束时修复它。这意味着您必须正确定义数据库字段的数据类型。
如果由于某种原因,你无法修复数据库(你应该努力尝试),你可以将字符串转换为数字
intval
[docs]和/或floatval
[docs] 或使用unary plus operator [docs]的JavaScript:
var number = +string;
如果您不熟悉JavaScript,可能需要先阅读Working with Objects [MDN]。
答案 1 :(得分:1)
一个简单的JavaScript解决方案:
function formatChartData(data) {
for(var i = 0, length = data.length; i < length; i++) {
data[i].value1 = parseInt(data[i].value1, 10);
data[i].value2 = parseFloat(data[i].value2);
}
return data;
}
var chartData = formatChartData(<?php echo json_encode($myChartData); ?>);