修复格式错误的JSON

时间:2014-08-05 08:33:02

标签: php json

我有JSON格式错误的JSON文件,我想用PHP代码解决这个问题。

这是我的JSON:

x: 322.5, y: 174, colors: #000000, removable: true, draggable: true, rotatable: true, resizable: true, scale: 1, degree: 0, price: 0, boundingBox: false, textSize: 22, source: , originX: 322.5, originY: 174, currentColor: #000000, text: დედა, font: Arial

固定输出:

"x": 322.5, "y": 174, "colors": "#000000", "removable": true, "draggable": true, "rotatable": true, "resizable": true, "scale": 1, "degree": 0, "price": 0, "boundingBox": false, "textSize": 22, "source": , "originX": 322.5, "originY": 174, "currentColor": "#000000", "text": "დედა", "font": "Arial"

如何更正我的JSON? PHP可以处理吗?

2 个答案:

答案 0 :(得分:1)

这里没有快速解决方法。这个特定的例子很容易解析,因为它没有嵌套,所以你可以使用PHP的正则表达式为它编写一个简单的解析器,做出某些假设(所有数值的属性应该是数字,true并且false应该是布尔值而不是字符串,应该完全删除完全空的属性,而其他所有内容都是字符串),但是您要做出假设。像JSON这样的格式就是要删除这些假设。

正如巴马尔精明地指出的那样,如果能够解决(或要求创造者修复)产生这种输出的东西会更好。

答案 1 :(得分:0)

虽然这非常hacky,但如果你这样做会怎么样?

$str = 'x: 322.5, y: 174, colors: #000000, removable: true, draggable: true, rotatable: true, resizable: true, scale: 1, degree: 0, price: 0, boundingBox: false, textSize: 22, source: , originX: 322.5, originY: 174, currentColor: #000000, text: დედა, font: Arial';
$arr = explode(',',$str);
$tempArr = array();
foreach($arr as $value){
    $temp = explode(':',$value);
    foreach($temp as $k=>$v){
        $v = trim($v);
        if($v === true || $v === "true")
            $temp[$k] = true;   
        elseif($v === false || $v === "false")
            $temp[$k] = false;
        else
            $temp[$k] = '"'.$v.'"'; 
    }
    $tempArr[] = implode(':', $temp );
}
echo implode(',', $tempArr);