首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

PHP 處理非標準 JSON:鍵名無引號、單引號字符串的清洗與解析

     編輯:程式設計綜合問答

問題 JSON

{trend : 3, yearLowPrice : 99.9, points : [['2014-10-29',139.9], ...]}

不合法之處:鍵名無雙引號、字符串用單引號、尾逗號等。

清洗 + 解析完整代碼

$raw = <<<'JSON'
{trend : 3, yearLowPrice : 99.9, points : [['2014-10-29',139.9],['2014-11-11',115.9]]}
JSON;

// 1. 鍵名加雙引號
$json = preg_replace_callback('/([a-zA-Z0-9_]+)\s*:/', function($m) {
    return '"' . $m[1] . '":';
}, $raw);

// 2. 單引號字符串轉雙引號(簡易,假設無嵌套單引號)
$json = str_replace("'", '"', $json);

// 3. 移除尾隨逗號
$json = preg_replace('/,\s*([}\]])/', '$1', $json);

// 4. 解析
$arr = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
    throw new Exception('JSON 解析失敗: ' . json_last_error_msg());
}

print_r($arr);

輸出結果

Array
(
    [trend] => 3
    [yearLowPrice] => 99.9
    [points] => Array
        (
            [0] => Array ( [0] => 2014-10-29 [1] => 139.9 )
            [1] => Array ( [0] => 2014-11-11 [1] => 115.9 )
        )
)

健壯性增強建議

  • 使用 composer require seld/jsonlint 先驗證/修復
  • 若數據來源可控,要求上游輸出標準 JSON (json_encode)
  • 大數據量場景改用流式解析器 JsonMachine
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved