我尝试过爆炸功能,但没有给出我想要的输出。
这是我的代码和说明:
{
refresh_token: "xxxx",
access_token: "xxxx",
expires_in: 21600,
}
我将此值作为字符串,我想将此refresh_token转换为数组中的键,并将“ xxxx”转换为数组中的值。
我曾尝试过使用爆炸功能,但是它提供了新的键,例如[0] =>“ refresh_token”。
答案 0 :(得分:2)
explode()
不适合该工作。使用该字符串格式,您将需要编写一个自定义函数。假设这些值不包含逗号,并且对象中的最后一个值与其他值一样总是以逗号结尾,则可以这样做:
function parse_value_string($string) {
preg_match_all('/([a-z_]+):\s+(.*),/', $string, $matches);
return array_combine($matches[1], array_map(function($val) {
return trim($val, '"');
}, $matches[2]));
}
$test = '{
refresh_token: "xxxx",
access_token: "xxxx",
expires_in: 21600,
}';
$values = parse_value_string($test);
print_r($values);
/*
Array
(
[refresh_token] => xxxx
[access_token] => xxxx
[expires_in] => 21600
)
*/
根据您的实际数据,您可能会遇到这种方法的问题。您的源字符串实际上确实接近常规JSON。如果将逗号放在最后一个值之后,并将数据键括在引号中,则可以使用PHP的本机JSON支持来解析它:
$test = '{
"refresh_token": "xxxx",
"access_token": "xxxx",
"expires_in": 21600
}';
$values = json_decode($test, true);
print_r($values);
/*
Array
(
[refresh_token] => xxxx
[access_token] => xxxx
[expires_in] => 21600
)
*/
因此,如果您可以调整字符串源以生成有效的JSON(而不是此自定义字符串),您的生活就会突然变得更加轻松。
答案 1 :(得分:2)
您可以使用PHP json_decode函数,因为它是JSON字符串格式。
例如 :
$encodedJson = json_decode('{
refresh_token: "xxxx",
access_token: "xxxx",
expires_in: 21600,
}');
$encodedJson->access_token
将为您提供xxxx值
答案 2 :(得分:2)
使用str_split();应该起作用
答案 3 :(得分:1)
否则为kosher-PHP json中未加引号的键,您应该尽可能将它们用引号引起来,然后可以将其转换为数组:
$x = (array) json_decode ( '{
"refresh_token": "xxxx",
"access_token": "xxxx",
"expires_in": 21600,
}' );
如果在代码中不可能做到这一点,则可以使用一些字符串黑客来强制执行:
$x = (array) json_decode( str_replace( [ ' ' , ':' , ',' , '{' , '}' ], [ '', '":', ',"' , '{"' , '"}' ],
'{refresh_token:"xxxx",access_token: "xxxx",expires_in: 21600}' ) );
我实际上没有检查此代码 此外,这是丑陋的AF
答案 4 :(得分:0)
只需使用json_decode
函数,但要记住检查字符串的有效性,例如,在字符串中,最后一个逗号应删除,并且键应用双引号引起来。