Php 从MySQL数据库中的JSON字符串计算值
我有一个保存在MySQL数据库中的JSON字符串列表 榜样 {外部:29.6,设备:test1,内部:28.5}{外部:29.6,设备:test1,内部:28.5} {外部:29.6,设备:test1,内部:28.5} 在PHP中,我试图计算平均外部和内部温度。 如何将值提取为数字并进行计算?使用Php 从MySQL数据库中的JSON字符串计算值,php,json,Php,Json,我有一个保存在MySQL数据库中的JSON字符串列表 榜样 {外部:29.6,设备:test1,内部:28.5}{外部:29.6,设备:test1,内部:28.5} {外部:29.6,设备:test1,内部:28.5} 在PHP中,我试图计算平均外部和内部温度。 如何将值提取为数字并进行计算?使用 $arr = json_decode({"external":"29.6","device":"test1","internal":"28.5"}) 获取数组 array ( 'extern
$arr = json_decode({"external":"29.6","device":"test1","internal":"28.5"})
获取数组
array (
'external' => '29.6',
'device' => 'test1',
'internal' => '28.5',
)
然后使用
$arr['external'] and $arr['internal']
您可以使用函数json_decode
此函数解析json并返回表键/值
$myJson = '{"external":"29.6","device":"test1","internal":"28.5"}'
$myParseJson = json_decode($myJson)
结果是:
array(3) {
["external"] => "29.6",
["device"] => "test1",
["internal"] => "28.5"
}
有关更多信息:
您需要在json解码中使用true,否则您将得到一个stdclass对象,数组技术将无法工作。只需稍加修改,您就可以在MySql中使用实际列名替换数据列,使用表名替换表: 它使用mysql字符串函数来搜索关键字的位置,即“external”,并从该单词的末尾创建一个子字符串。然后再次执行子字符串以将值提取到下一个 如果您有大量数据100k行或更多行,那么这应该比将所有数据都提取到php要快 或者,在以后的MySql 5.7+和MariaDB 10.2+版本中,您可以使用JSON_EXTRACT函数:
我只存储了大约3000行,所以我使用了pr1nc3建议的解决方案。我同意,如果需要存储更多行,您的解决方案将更有效。谢谢你的帮助。
<?php
$test1='{"external":"29.6","device":"test1","internal":"28.5"}';
$array1=json_decode($test1,true);
echo"<pre>";
print_r($array1['external']);
echo "</br>";
print_r($array1['internal']);
select AVG(
SUBSTRING(
SUBSTRING(data_column, POSITION('external' IN data_column) + 11),
1,
POSITION("\"" IN SUBSTRING(data_column, POSITION('external' IN data_column) + 11)) - 1
)
) as avg_external,
AVG(
SUBSTRING(
SUBSTRING(data_column, POSITION('internal' IN data_column) + 11),
1,
POSITION("\"" IN SUBSTRING(data_column, POSITION('internal' IN data_column) + 11)) - 1
)
) as avg_internal
from your_table;