如何在PHP中将非json字符串转换为有效的json字符串

时间:2015-08-10 08:07:32

标签: php json

我有一个基于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"}

任何人都可以帮助我吗?

4 个答案:

答案 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}}
相关问题