【发布时间】:2017-03-28 23:30:46
【问题描述】:
我正在尝试使用 PHP 读取 JSON 元素 "unit" 和 "value"。但是,每个 JSON 中的某些 JSON 元素(“local/sysbench-cpu-1.0.0”、“m4.4xlarge-4.4.0-66-generic”)可能并不相同。这就是为什么我想使用正则表达式或数组索引来访问元素而不是特定的字符串:
{
"title": "cputests-sysbench-cpu-100-m4-4xlarge-20170328",
"results": {
"local\/sysbench-cpu-1.0.0": {
"arguments": "cpu performance benchmark",
"units": "seconds",
"results": {
"m4.4xlarge-4.4.0-66-generic": {
"value": "53.2386"
}
}
},
"": {
"arguments": "Memory Usage Monitor",
"units": "Megabytes",
"results": {
"m4.4xlarge-4.4.0-66-generic": {
"value": "1355,1356,1357,1357,1358,1359,1358,1359,1359,1358,1357,1358,1369,1370,1374,1373,1374,1376,1370,1362,1359,1360,1358,1358,1357,1358,1360,1360,1359,1359,1362,1362,1362,1363,1362,1363,1366,1365,1369,1366,1365,1363,1362,1363,1362,1363,1363,1363,1368,1374,1373,1372,1372,1373"
}
}
}
}
}
如果我不使用正则表达式或数组索引,PHP 脚本可以工作:
<?php
$string = file_get_contents("result.json"); <br>
$data = json_decode($string); <br>
//$data = json_decode($string, true);
//var_dump(json_decode($string)); <br>
print $data->{'results'}->{**'local/sysbench-cpu-1.0.0'**}->units; <br>
print "\n";<br>
print $data->{'results'}->{'local/sysbench-cpu-1.0.0'}->{'results'}->{'**m4.4xlarge-4.4.0-66-generic**'}->value; <br>
// print $data['results']['local/sysbench-cpu-1.0.0']['units']; <br>
// print "\n"; <br>
// print $data['results']['local/sysbench-cpu-1.0.0']['results']['m4.4xlarge-4.4.0-66-generic']['value']; <br>
?>
在使用json_decode($string, true) 时,任何尝试使用正则表达式代替字符串或数组索引都会失败。
【问题讨论】:
-
为什么要使用正则表达式?如果
json_decode工作得很好。