Php 从MySQL数据库中的JSON字符串计算值

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

我有一个保存在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 (
  '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;