簡體   English   中英

在PHP中將無效的JSON轉換為有效的JSON

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM