我有一个基于Web的短信服务提供商的API服务 当我打电话给api得到以下回复时
{Promotional SMS Credits: 0, Transactional SMS Credits: 9972}
我尝试使用json_decode()转换它的数组,但由于无效的JSON格式而失败(错过了键和值的引用)
我希望将无效的json字符串转换为PHP中的有效JSON,如下所示
{"Promotional SMS Credits": "0", "Transactional SMS Credits": "9972"}
任何人都可以帮助我吗?
答案 0 :(得分:1)
与运行API Feed的公司联系,告诉他们JSON错误......
你可以进行搜索和替换(preg_replace),但困难的部分是创建模糊匹配规则,因为为了解析它,你需要假设一些东西。也许你需要假设:
1a)钥匙不包含冒号 1b)或关键引号被正确转义 和 2a)值不包含逗号 2b)或值已正确转义引号。
答案 1 :(得分:0)
相当粗略的功能,但它确实返回原始字符串的json格式版本。
$str='{Promotional SMS Credits: 0, Transactional SMS Credits: 9972}';
function bad_str_to_json($str){
$str=str_replace(array('{','}'),'',$str);
$pairs=explode(',',$str);
$json=array();
foreach($pairs as $pair){
list($p,$v)=explode(':',$pair);
$json[trim($p)]=trim($v);
}
return json_encode($json);
}
echo bad_str_to_json($str);
答案 2 :(得分:0)
希望这会对你有所帮助。如果你有无效的JSON,你可以使用下面的代码进行转换:
$invalidJson = '{
Promotional SMS Credits: "0",
Transactional SMS Credits: "9972"
}';
$ValidJson = preg_replace("/\s{1,}/", ":", $invalidJson);
答案 3 :(得分:0)
{{1}}