[英]Convert invalid json into valid json in php
我正在通過api將一些值保存在數據庫中(因此我無法手動修改它)
當我從數據庫取回它時,json值格式無效。 我不想修改數據庫中的每個值。 我想要一些可以將其轉換為有效格式的php文件。
在我的數據庫中是這樣的:
$invalid='{
"response": {
"id": "16"", <--------------------- Invalid Format(It can be for any key)
"event_name": "testing",
"image": "images/Penguins.jpg",
"event_date": "2014-12-13",
"event_time": "02:10",
"time_interval": "4",
"location": "mohali",
"event_type": "Rock",
"detail": "sfdsf fgf ghb\t",
"delivery": "dggh fghgfh\t\t",
"status": "1"
}
}';
因此,如何通過php將其轉換為有效的json:
$invalid='{
"response": {
"id": "16", <--------------------- valid Format
"event_name": "testing",
"image": "images/Penguins.jpg",
"event_date": "2014-12-13",
"event_time": "02:10",
"time_interval": "4",
"location": "mohali",
"event_type": "Rock",
"detail": "sfdsf fgf ghb\t",
"delivery": "dggh fghgfh\t\t",
"status": "1"
}
}';
對於這種確切的情況,它將執行以下操作:
<?php
$invalid='{
"response": {
"id": "16"",
"event_name": "testing",
"image": "images/Penguins.jpg",
"event_date": "2014-12-13",
"event_time": "02:10",
"time_interval": "4",
"location": "",
"event_type": "Rock"",
"detail": "sfdsf fgf ghb\t",
"delivery": "dggh fghgfh\t\t",
"status": "1""
},
"bar":{ "test": ""
}
}';
$invalid = explode("\n",$invalid);
foreach($invalid as $idx => &$line) {
$num = 0;
for($z=0;$z<strlen($line);++$z) {
$ch = $line[$z];
if($ch == "\\") {
++$z;
} else if($ch == '"') {
++$num;
$last_pos = $z;
}
}
if($num % 2 == 1) {
$line[$last_pos] = ' ';
}
}
$valid = implode("\n",$invalid);
print_r($valid);
輸出:
{
"response": {
"id": "16" ,
"event_name": "testing",
"image": "images/Penguins.jpg",
"event_date": "2014-12-13",
"event_time": "02:10",
"time_interval": "4",
"location": "",
"event_type": "Rock" ,
"detail": "sfdsf fgf ghb\t",
"delivery": "dggh fghgfh\t\t",
"status": "1"
},
"bar":{ "test": ""
}
}
但實際上建議修復數據庫中的數據以及產生無效JSON
^^的表單/代碼
它在哪些方面可能無效? 如果僅存在雙引號,則使用preg_replace:
$valid = preg_replace('/""/','"',$invalid);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.