{ "подпись" = "Alof/CEJ8a=="; "информация о покупке" = "ewoJIml0"; "среда" = "Тест"; "стручок" = "100"; "статус подписи" = "0"; }
Каков наилучший способ с помощью PHP проанализировать эту транзакцию покупки iPhone в приложении в массив? Спасибо.
{ "подпись" = "Alof/CEJ8a=="; "информация о покупке" = "ewoJIml0"; "среда" = "Тест"; "стручок" = "100"; "статус подписи" = "0"; }
Каков наилучший способ с помощью PHP проанализировать эту транзакцию покупки iPhone в приложении в массив? Спасибо.
Не уверен, что это «лучший» способ, но это один из способов. Поскольку строка данных разделена общими символами (каждый ключ/значение задается ;
, затем =
между ключом/значением), основная часть синтаксического анализа может быть выполнена с помощью explode()
. И вы можете использовать trim()
— с пользовательским списком символов — для удаления дополнительные символы вокруг всей строки и ключи/значения.
Обратите внимание, что это предполагает, что ключ никогда не имеет =
(хотя значение может):
$data = '{ "signature" = "Alof/CEJ8a=="; "purchase-info" = "ewoJIml0"; "environment" = "Test"; "pod" = "100"; "signing-status" = "0"; }';
//remove the braces, spaces, and trailing semicolon
$data = trim($data, '{}; ');
$array = array();
//split on ';'
foreach(explode(';', $data) as $set){
//parse key/value
list($key, $value) = explode('=', $set, 2);
$array[trim($key, '"\' ')] = trim($value, '"\' ');
}
print_r($array);
Выход:
Array
(
[signature] => Alof/CEJ8a==
[purchase-info] => ewoJIml0
[environment] => Test
[pod] => 100
[signing-status] => 0
)
Вы можете заменить = на : и ; на , а затем использовать json_decode().
Вот так:
$data = '{ "signature" = "Alof/CEJ8a=="; "purchase-info" = "ewoJIml0"; "environment" = "Test"; "pod" = "100"; "signing-status" = "0"; }';
$data = explode('" =',$data);
$data = implode('" :',$data);
$data = explode(';',$data);
array_pop($data);
$data = implode(',',$data);
$data = explode(' ',$data);
$data = implode('',$data);
$data .= "}";
$data = json_decode($data, true);
Проверьте это здесь.
";
на ,
и " = "
на :
. Разве это не преобразовало бы его в JSON
без explode
/implode
? preg_replace
можно использовать в том случае, если пробел может меняться.
- person Tim Lytle; 16.10.2011
$data = '{ "signature" = "Alof/CEJ8a=="; "purchase-info" = "ewoJIml0"; "environment" = "Test"; "pod" = "100"; "signing-status" = "0"; }';
$search = array('/\s\=\s/', '/;\s\}$/', '/;/');
$replace = array(':', '}', ',');
$json = preg_replace($search, $replace, $data);
print_r(json_decode($json));
Выход:
Array
(
[signature] => Alof/CEJ8a==
[purchase-info] => ewoJIml0
[environment] => Test
[pod] => 100
[signing-status] => 0
)
json_decode()
? - person Alexsander Akers   schedule 16.10.2011JSON
, просто похоже, что так и должно быть. - person Tim Lytle   schedule 16.10.2011