php - json对象原始数据字段到php数组中
问题描述
我有一个从 splunk 提取的 JSON 对象数据,其中一个字段_raw
包含一串数据,但由于它的值不是有效的 json 字符串,我似乎无法使用json_decode()将其转换为 php 数组
有什么想法可以将 的值_raw
转换为 php 数组吗?
这是我的 json 数据
{
"result": {
"_raw": "Jun 30 06:51:04 blablabla.com apache2: event_id="something" event="something" app="testapp" serial_number="066f1cda" revoke_reason="key compromise" revoke_comment="xxxxxx" delay_revoke="15" url="/blablabla.php" account_id="123456" user_id="xxxxxxx" staff_id="xxxx" staff_name="todd" ip_address="123.123.123.123"",
"splunk_server": "splunkin02.localhost.com"
},
"results_link": "https://splunk.sffew.com",
"app": "search",
"search_name": "TEST",
"owner": "toodles@sfsfe.com",
"sid": "scheduler_blahlahlah"
}
希望能够引用字符串中的每个值,就像这样
Array (
[event_id] => something
[event] => something
[app] => testapp
[serial_number] => 066f1cda
[revoke_reason] => key compromise
[revoke_comment] => xxxxxx
[delay_revoke] => 15
[url] => /blablabla.php
[account_id] => 123456
[user_id] => xxxxxxx
[staff_id] => xxxx
[staff_name] => todd
[ip_address] => 123.123.123.123
)
解决方案
一种方法,preg_match_all()
并且foreach()
,
<?php
$re = '/"_raw": (.*)(?=,)/m';
$str = '{
"result": {
"_raw": "Jun 30 06:51:04 blablabla.com apache2: event_id="something" event="something" app="testapp" serial_number="066f1cda" revoke_reason="key compromise" revoke_comment="xxxxxx" delay_revoke="15" url="/blablabla.php" account_id="123456" user_id="xxxxxxx" staff_id="xxxx" staff_name="todd" ip_address="123.123.123.123"",
"splunk_server": "splunkin02.localhost.com"
},
"results_link": "https://splunk.sffew.com",
"app": "search",
"search_name": "TEST",
"owner": "toodles@sfsfe.com",
"sid": "scheduler_blahlahlah"
}';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
$parsable_array = explode(' ',$matches[0][1]);
$expected_array = array_filter($parsable_array, function ($var) { return (stripos($var, '=') != false); });
$final_result = [];
foreach($expected_array as $str){
list($key,$value) = explode('=',$str);
$final_result[$key] = trim($value,'"');
}
print_r($final_result);
?>
工作演示: https ://3v4l.org/fFQSZ
推荐阅读
- go - 为什么未分配包级指针变量?
- machine-learning - NeRF(神经辐射场)用于什么?
- gcc - gfortran 编译器错误:求幂结果超出 INTEGER(4) 的范围
- mongodb - 从流星运行 mongodb
- r-markdown - 在 RMarkdown 中为所有表格编号添加一个字母
- c - 使用 pThread 比使用 Sequential 更糟糕
- go - 范围内的转义模板
- c# - 以类的实例作为参数的动态方法调用
- laravel - Laravel markdown 邮件打印原始 html
- angular - Angular 8:错误:未捕获(承诺):NullInjectorError:StaticInjectorError(AppModule)